问题标签 [cancellationtokensource]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
277 浏览

c# - 只释放到最后一个线程的线程同步(锁定)

确保只有“后进”线程才能访问互斥锁/锁定区域而中间线程不获取锁的正确方法是什么?

示例序列:

*B 应该无法通过异常(如 inSemaphoreSlim.Wait(CancellationToken)或布尔Monitor.TryEnter()类型构造)获取锁。

我可以想到几种类似的方案来实现这一点(例如使用CancellationTokenSourceand SemaphoreSlim),但它们似乎都不是特别优雅。

这种情况有一个常见的做法吗?

0 投票
1 回答
828 浏览

c# - CancellationToken.ThrowIfCancellationRequested 不抛出

我编写了一个非常简单的应用程序来实现一些基于任务的异步操作。

客户端代码调用一个返回任务的方法。我将 CancellationToken 传递给该方法,但即使在此过程中调用 CancellationToken.ThrowIfCancellationRequested 方法,取消也不会引发 OperationCancelledException。

如果您想自己测试,可以在这里下载整个解决方案: https ://github.com/stevehemond/asynctap-example

这是代码:

将 CancellationToken 传递给 Tasks 一定有一些我不明白的地方......我只是不知道是什么。

0 投票
1 回答
556 浏览

c# - 取消子任务时如何仅取消父任务?

我有一个带有取消令牌作为参数的异步控制器操作:

SearchModel.GetRemains方法调用 3 个其他异步方法(Web 服务),当其中一个被超时取消时,其他的没有执行。

在这 3 个 Web 服务中的每一个中,我也异步连接到数据库。async当第三async个子方法出错时,如何使我的两个任务工作?

我将取消令牌参数async从父方法传递给所有方法。

如果我根本不希望子操作影响我的父操作的执行?但是如果父母被取消,希望它取消吗?我应该怎么办?

感谢您的关注和帮助

0 投票
3 回答
8067 浏览

c# - 如何取消异步 WCF 调用?

我一直在尝试了解如何基于新的 .NET 4.5 CancellationToken 机制来实现 WCF 调用取消。我发现的所有示例都不是基于 WCF 的,并且不跨越服务边界。

我的服务:

我的客户(桌面应用程序):

使用自动生成的代理:

如何取消此任务?请提供适用于 .NET 4.5+ 上的 WCF 的具体示例

编辑:

下面的答案似乎表明由于技术原因这是不可能的。所以,想象一下,我创建了我的服务ContextMode=Session,然后设置了一个静态变量(在单独的服务调用中)调用cancellationPending=true,我的原始调用在这个阶段仍在运行,它会定期检查该变量。我还是不能取消吗?这仍然是不可能的吗?如果是这样,为什么?

0 投票
2 回答
2320 浏览

c# - C# WPF 取消异步函数

我对 C# WPF 还很陌生,并且一直在使用异步函数。这就是我所拥有的

问题是,有时 SearchForAccount 函数会超时。我还没有弄清楚是什么原因造成的,因为没有抛出错误。我想实现一个允许取消此函数调用的按钮。我试过弄乱 CancellationTokenSource 但它似乎不像我这样做的那样工作。

任何帮助或建议将不胜感激。

谢谢!现实转变

编辑:

这是我对 CancellationToken 的尝试

我也尝试过这样的事情(不记得确切,现在不在撤消历史记录中):

我将令牌传递给函数,但我不记得我对函数做了什么。在这两种情况下,在 SearchForAccount 函数调用返回(如果它返回)之前,取消不会发生任何事情。如果它没有返回,那么它就卡住了,这正是我想要一个取消按钮的原因。

快速运行:程序启动。用户可以输入用户名并点击搜索。然后搜索将搜索该帐户是否存在于域中以及该帐户的一些详细信息。搜索完成后,结果将发布到数据网格。

问题:当点击搜索时,有时(很少)它会无限期地继续搜索并且永远不会返回。返回超时消息的东西会很棒。

0 投票
4 回答
478 浏览

c# - 任务 T.IsCancelled = false; 我怎样才能做到这一点?

我有这个异步方法:

我希望能够监视调用此函数产生的任务:

我有一个CancellationTokenSource.

我怎样才能使T(或函数Initialize)利用该源令牌,以便如果它被取消,T.IsCancelled将是真的?

编辑

我不确定,但我认为我的问题的答案在于使用TaskCompletionSource对象。迈克给出的答案让我得出了这个结论......

0 投票
3 回答
1328 浏览

c# - 如何取消 FileStream.ReadAsync( ... ) 请求?

鉴于以下情况:

T永远完成并返回RanToCompletion

我的用例有点复杂,因为我正在从可能随时打开或关闭的设备读取数据(因此不是直接从文件读取,而是从安全文件句柄读取;但是结果是相同的这个案例和我的实际用例)。

我想中断(取消)FileStream.ReadToAsync()。

我怎样才能做到这一点,它会停止阅读它所在的位置并立即取消?

0 投票
2 回答
827 浏览

c# - 使用 continuation 链接任务并随后运行并行任务

并行任务的工作流程

http://i.stack.imgur.com/luRnu.png

我希望能就我面临的问题获得帮助。所以问题是我正在运行并行任务来搜索文件夹中的文件。每个任务都需要识别文件并将其添加到文件数组中。接下来,等待每个任务完成,以便收集文件,然后对结果进行排序。接下来,独立处理已排序的文件,通过对每个文件运行一个任务来读取它以获取匹配的模式。最后阶段是以人类可读的格式将所有结果汇总在一起,并以用户友好的方式显示。

所以问题是我想以不阻塞 UI 线程的正确方式链接任务。我希望能够在程序所处的任何阶段取消所有内容。

把它们加起来:

第 1 阶段:通过搜索文件夹来查找文件。每个任务通过文件夹树递归搜索。

第 2 阶段:对找到的所有文件进行排序并清理重复项

第 3 阶段:开始新任务以独立处理文件。每个任务都会打开一个文件并搜索匹配的模式。

第 4 阶段:将每个文件搜索的结果聚合成一个巨大的结果集,并使其易于阅读。

0 投票
0 回答
609 浏览

c# - 如何在 ViewModel 中正确处理 CancellationTokenSource?

通常,当您尝试在视图模型中执行异步任务时,代码如下所示(简化):

问题是这CancellationTokenSource是一个IDisposable. 这是否意味着我们只是将它放在一个using块中,还是因为它存储在私有财产中,所以还有更多内容?

0 投票
0 回答
3335 浏览

c# - 如何在C#项目中第二次取消cancellationtoken

我的 C# 项目中有两个线程;UI 线程和 BackgroundWorker。

在 BackgroundWorker 中有一些工作,例如;

在 UI 线程中;

在 UI 线程中,当用户单击按钮时,BackgroundWorker 开始运行。如果用户单击第二个按钮,BackgroundWorker 将被取消。这个循环没有问题。

但是,当 BackgroundWorker 被取消后用户再次点击时,由于 IsCancellationRequested 为 true,线程不会在 token.WaitHandle.WaitOne(20000) 的行中等待,而是将其传递到下一行。这是个问题!

我不能多次使用令牌吗?如何在第二个周期再次将 canceltoken 的 isCancellationRequested 属性设置为 false?还是我必须使用新的取消令牌?