问题标签 [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.
c# - 只释放到最后一个线程的线程同步(锁定)
确保只有“后进”线程才能访问互斥锁/锁定区域而中间线程不获取锁的正确方法是什么?
示例序列:
*B 应该无法通过异常(如 inSemaphoreSlim.Wait(CancellationToken)
或布尔Monitor.TryEnter()
类型构造)获取锁。
我可以想到几种类似的方案来实现这一点(例如使用CancellationTokenSource
and SemaphoreSlim
),但它们似乎都不是特别优雅。
这种情况有一个常见的做法吗?
c# - CancellationToken.ThrowIfCancellationRequested 不抛出
我编写了一个非常简单的应用程序来实现一些基于任务的异步操作。
客户端代码调用一个返回任务的方法。我将 CancellationToken 传递给该方法,但即使在此过程中调用 CancellationToken.ThrowIfCancellationRequested 方法,取消也不会引发 OperationCancelledException。
如果您想自己测试,可以在这里下载整个解决方案: https ://github.com/stevehemond/asynctap-example
这是代码:
将 CancellationToken 传递给 Tasks 一定有一些我不明白的地方......我只是不知道是什么。
c# - 取消子任务时如何仅取消父任务?
我有一个带有取消令牌作为参数的异步控制器操作:
SearchModel.GetRemains
方法调用 3 个其他异步方法(Web 服务),当其中一个被超时取消时,其他的没有执行。
在这 3 个 Web 服务中的每一个中,我也异步连接到数据库。async
当第三async
个子方法出错时,如何使我的两个任务工作?
我将取消令牌参数async
从父方法传递给所有方法。
如果我根本不希望子操作影响我的父操作的执行?但是如果父母被取消,希望它取消吗?我应该怎么办?
感谢您的关注和帮助
c# - 如何取消异步 WCF 调用?
我一直在尝试了解如何基于新的 .NET 4.5 CancellationToken 机制来实现 WCF 调用取消。我发现的所有示例都不是基于 WCF 的,并且不跨越服务边界。
我的服务:
我的客户(桌面应用程序):
使用自动生成的代理:
如何取消此任务?请提供适用于 .NET 4.5+ 上的 WCF 的具体示例
编辑:
下面的答案似乎表明由于技术原因这是不可能的。所以,想象一下,我创建了我的服务ContextMode=Session
,然后设置了一个静态变量(在单独的服务调用中)调用cancellationPending=true
,我的原始调用在这个阶段仍在运行,它会定期检查该变量。我还是不能取消吗?这仍然是不可能的吗?如果是这样,为什么?
c# - C# WPF 取消异步函数
我对 C# WPF 还很陌生,并且一直在使用异步函数。这就是我所拥有的
和
问题是,有时 SearchForAccount 函数会超时。我还没有弄清楚是什么原因造成的,因为没有抛出错误。我想实现一个允许取消此函数调用的按钮。我试过弄乱 CancellationTokenSource 但它似乎不像我这样做的那样工作。
任何帮助或建议将不胜感激。
谢谢!现实转变
编辑:
这是我对 CancellationToken 的尝试
我也尝试过这样的事情(不记得确切,现在不在撤消历史记录中):
我将令牌传递给函数,但我不记得我对函数做了什么。在这两种情况下,在 SearchForAccount 函数调用返回(如果它返回)之前,取消不会发生任何事情。如果它没有返回,那么它就卡住了,这正是我想要一个取消按钮的原因。
快速运行:程序启动。用户可以输入用户名并点击搜索。然后搜索将搜索该帐户是否存在于域中以及该帐户的一些详细信息。搜索完成后,结果将发布到数据网格。
问题:当点击搜索时,有时(很少)它会无限期地继续搜索并且永远不会返回。返回超时消息的东西会很棒。
c# - 任务 T.IsCancelled = false; 我怎样才能做到这一点?
我有这个异步方法:
我希望能够监视调用此函数产生的任务:
我有一个CancellationTokenSource
.
我怎样才能使T
(或函数Initialize
)利用该源令牌,以便如果它被取消,T.IsCancelled
将是真的?
编辑
我不确定,但我认为我的问题的答案在于使用TaskCompletionSource
对象。迈克给出的答案让我得出了这个结论......
c# - 如何取消 FileStream.ReadAsync( ... ) 请求?
鉴于以下情况:
T
将永远完成并返回RanToCompletion
。
我的用例有点复杂,因为我正在从可能随时打开或关闭的设备读取数据(因此不是直接从文件读取,而是从安全文件句柄读取;但是结果是相同的这个案例和我的实际用例)。
我想中断(取消)FileStream.ReadToAsync()。
我怎样才能做到这一点,它会停止阅读它所在的位置并立即取消?
c# - 使用 continuation 链接任务并随后运行并行任务
并行任务的工作流程
我希望能就我面临的问题获得帮助。所以问题是我正在运行并行任务来搜索文件夹中的文件。每个任务都需要识别文件并将其添加到文件数组中。接下来,等待每个任务完成,以便收集文件,然后对结果进行排序。接下来,独立处理已排序的文件,通过对每个文件运行一个任务来读取它以获取匹配的模式。最后阶段是以人类可读的格式将所有结果汇总在一起,并以用户友好的方式显示。
所以问题是我想以不阻塞 UI 线程的正确方式链接任务。我希望能够在程序所处的任何阶段取消所有内容。
把它们加起来:
第 1 阶段:通过搜索文件夹来查找文件。每个任务通过文件夹树递归搜索。
第 2 阶段:对找到的所有文件进行排序并清理重复项
第 3 阶段:开始新任务以独立处理文件。每个任务都会打开一个文件并搜索匹配的模式。
第 4 阶段:将每个文件搜索的结果聚合成一个巨大的结果集,并使其易于阅读。
c# - 如何在 ViewModel 中正确处理 CancellationTokenSource?
通常,当您尝试在视图模型中执行异步任务时,代码如下所示(简化):
问题是这CancellationTokenSource
是一个IDisposable
. 这是否意味着我们只是将它放在一个using
块中,还是因为它存储在私有财产中,所以还有更多内容?
c# - 如何在C#项目中第二次取消cancellationtoken
我的 C# 项目中有两个线程;UI 线程和 BackgroundWorker。
在 BackgroundWorker 中有一些工作,例如;
在 UI 线程中;
在 UI 线程中,当用户单击按钮时,BackgroundWorker 开始运行。如果用户单击第二个按钮,BackgroundWorker 将被取消。这个循环没有问题。
但是,当 BackgroundWorker 被取消后用户再次点击时,由于 IsCancellationRequested 为 true,线程不会在 token.WaitHandle.WaitOne(20000) 的行中等待,而是将其传递到下一行。这是个问题!
我不能多次使用令牌吗?如何在第二个周期再次将 canceltoken 的 isCancellationRequested 属性设置为 false?还是我必须使用新的取消令牌?