问题标签 [cancellation-token]
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# - 任务未按预期取消
我们得到了以下场景:
IMO 预期的行为是任务的操作大部分在Task.Delay(2500)被处理后被取消。
但控制台正在打印:
这感觉就像一个错误。如果您将CancellationToken作为参数添加到Task.Delay -Function,它将按预期工作。
那么,如果任务中的函数使用Task.Delay,您可能不知道如何处理取消?
c# - 反应式扩展序列化任务每个都可以取消
我试图用 Rx 扩展解决方案来回答另一个问题。在制作解决方案时,我发现了一些奇怪的东西。
取消超时有问题。不知何故,当第三个周期发生时(我们已经等待了大约 30 毫秒),ReadNext
并不是每次都取消。
查看打印输出:
我是否必须听取其他调度程序,以确保在 25 毫秒后取消令牌肯定会被取消,或者其他导致错误的原因?
编辑
如果我将睡眠顺序升级一个(检查上面的注释代码),它就可以工作。问题在于Thread.Sleep
不够精确。
c# - CancellationToken.ThrowIfCancellationRequested 不抛出
我编写了一个非常简单的应用程序来实现一些基于任务的异步操作。
客户端代码调用一个返回任务的方法。我将 CancellationToken 传递给该方法,但即使在此过程中调用 CancellationToken.ThrowIfCancellationRequested 方法,取消也不会引发 OperationCancelledException。
如果您想自己测试,可以在这里下载整个解决方案: https ://github.com/stevehemond/asynctap-example
这是代码:
将 CancellationToken 传递给 Tasks 一定有一些我不明白的地方......我只是不知道是什么。
c# - 将取消令牌提供给任务什么都不做?
我有两个直接来自 microsoft 的示例,这些示例似乎与取消令牌无关,因为我可以删除提供给任务的令牌,结果是相同的。所以我的问题是:取消令牌的用途是什么,为什么这些例子不好?我错过了什么..?:)
代码示例2: https ://msdn.microsoft.com/en-us/library/system.threading.cancellationtoken(v=vs.110).aspx
c# - TaskCancellationException 如何避免成功控制流的异常?
在我们的应用程序中,我们经常使用 async / await 和 Tasks。因此它确实经常使用 Task.Run,有时还使用内置的取消支持CancellationToken
。
如果我现在使用 CancellationToken 取消执行,则执行会在下一个循环开始时停止,或者如果任务根本没有启动,它会引发异常(Task.Run 中的 TaskCanceledException)。现在的问题是为什么 Task.Run 使用 Exception 来控制成功取消,而不是仅仅返回一个已完成的 Task。MS 是否有任何具体原因不遵守“不要使用异常来控制执行流程”规则?
以及如何避免在完全无用的 try catch (TaskCancelledException) 块中对每个支持取消的方法(很多)进行装箱?
c# - 取消所有异步任务
是否可以在不知道当前正在运行什么的情况下取消所有异步方法?
例如,我有几个可以运行异步任务的类:
我想在注销之前关闭每个异步任务:
是否可以做到这一点,而无需将任务保存到查询中?
c# - 在 C# 中通过 URI 传递 CancellationToken
我在一个项目中有一个当前工作的控制器方法,如下所示:
但这可能会从另一个项目中调用,使用以下命令进行传递调用,具体取决于调用者是谁/在哪里:
第二个示例简单地创建 url 并将其传递给第一个示例中持有的实际控制器,并返回结果。我在谷歌上搜索了这个问题的答案,但找不到任何匹配的东西。
我可以创建一个传递到第二个示例的 GET 中的取消令牌,如图所示,然后将它(连同相关搜索信息)传递到另一个 GET 中吗?(在另一个远程服务器上运行)
c# - 如何取消并行操作并返回部分结果列表?
我对数据列表进行了长时间的并行操作,如下所示:
在这种情况下,我使用 AsParallel 下载附件列表,我希望能够部分取消此操作。现在完成此操作的方法是在调用 cancelToken 时返回 null 并过滤列表中的空值。
有没有更清洁的方法来做到这一点?
c# - 如何在C#项目中第二次取消cancellationtoken
我的 C# 项目中有两个线程;UI 线程和 BackgroundWorker。
在 BackgroundWorker 中有一些工作,例如;
在 UI 线程中;
在 UI 线程中,当用户单击按钮时,BackgroundWorker 开始运行。如果用户单击第二个按钮,BackgroundWorker 将被取消。这个循环没有问题。
但是,当 BackgroundWorker 被取消后用户再次点击时,由于 IsCancellationRequested 为 true,线程不会在 token.WaitHandle.WaitOne(20000) 的行中等待,而是将其传递到下一行。这是个问题!
我不能多次使用令牌吗?如何在第二个周期再次将 canceltoken 的 isCancellationRequested 属性设置为 false?还是我必须使用新的取消令牌?
asp.net - Async Await - 调用 SQL Server 时的 CancellationTokens。ASP.NET
向 SQL Server 发出异步请求时使用取消令牌是一种好习惯吗?
假设我们有一种情况,我们最终可能会导致 SQL Server 报告“操作超时”失败。
最终,SQL Server 将向我们返回异常......并且来自线程池的任务接收到包含异常的结果。
但是,如果我们通过引入具有缩短超时限制的取消令牌来防御这种情况会更好吗?
我的直觉告诉我,我应该把这留给 SQL Server 来报告任何异常,但这可能意味着让请求挂起几分钟..
希望这是有道理的。