问题标签 [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.

0 投票
1 回答
2392 浏览

c# - 使用没有 Task.Wait() 的 cancelToken

我有winforms app一个长时间运行的任务和两个按钮。一键启动,一键停止。

当我按下开始按钮时,一个带有取消令牌的新任务就会启动。如果我按下停止按钮,取消令牌的取消方法就会被调用。

我希望 UI 始终可用,所以我在哪里放置 try, catch 块来完成这项工作。在我看到的所有例子中,他们都把它放在 t.Wait();

但是,如果我这样做,UI 会冻结,这就是我首先使用 Task 的原因,以便在执行任务时继续使用 ui。那么在不使用 Task.Wait 的情况下将 try catch 块放在哪里。

开始按钮:

停止按钮:

0 投票
5 回答
24248 浏览

c# - 为什么 CancellationToken 与 CancellationTokenSource 是分开的?

CancellationToken我正在寻找除了CancellationTokenSource类之外还引入.NET 结构的理由。我了解如何使用 API,但也想了解为什么要这样设计。

即,为什么我们有:

而不是像这样直接传递CancellationTokenSource

这是基于取消状态检查比传递令牌更频繁发生的事实的性能优化吗?

这样就CancellationTokenSource可以跟踪和更新CancellationTokens,并且对于每个令牌,取消检查都是本地字段访问?

鉴于在这两种情况下没有锁定的 volatile bool 就足够了,我仍然不明白为什么会更快。

谢谢!

0 投票
1 回答
1462 浏览

f# - F# Async.RunSynchronously 与 timeout 和 cancelToken

当使用超时和 CancellationToken 调用 Async.RunSynchronously 时,超时值似乎被忽略了。我可以通过在 CancellationToken 上调用 CancelAfter 来解决此问题,但理想情况下,我希望能够区分工作流中发生的异常 TimeOutExceptions 和 OperationCanceledExceptions。

我相信下面的示例代码证明了这一点。

输出如下,表明超时仅在第一种情况下有效(未指定 CancelationToken)

这是预期的行为吗?有没有办法得到我所追求的行为?

谢谢!

0 投票
4 回答
237632 浏览

c# - 如何使用 CancellationToken 属性?

与前面的 RulyCanceler 类的代码相比,我想使用 CancellationTokenSource.

如何使用Cancellation Tokens中提到的它,即不抛出/捕获异常?我可以使用该IsCancellationRequested物业吗?

我试图这样使用它:

但这cancelToken.ThrowIfCancellationRequested();在方法中给出了运行时错误Work(CancellationToken cancelToken)

我成功运行的代码在新线程中捕获了 OperationCanceledException:

0 投票
2 回答
2080 浏览

c# - 将 CancellationToken 与异步方法的任务相关联

问题:有没有办法将 aCancellationToken与方法Task返回的值关联起来async

通常,如果 a与匹配的's一起抛出, aTask将最终进入Canceled状态。如果它们不匹配,则任务进入状态:OperationCancelledExceptionCancellationTokenTaskCancellationTokenFaulted

使用async/ await,我还没有找到设置方法的方法TaskCancellationToken从而实现相同的功能)。从我的测试来看,似乎任何 OperationCancelledException都会导致该async方法进入 Canceled 状态:

有更多的控制权会很好,因为如果我从我的方法调用的async方法被取消(并且我不希望取消 - 即它不是 thisTaskCancellationToken),我希望任务进入Faulted状态- -不是Canceled国家。

0 投票
7 回答
13583 浏览

c# - 获取任务取消令牌

我可以获取在任务操作执行期间CancellationToken传递给Task构造函数的内容吗?大多数示例如下所示:

但是,如果我的操作不是 lambda 而是放置在其他类中的方法并且我没有直接访问权限怎么办tokentoken唯一的方法是作为状态传递吗?

0 投票
3 回答
1447 浏览

c# - 带有 CancellationToken 参数的 CopyTo

我看到CopyToAsyncCancellationToken争论。但我不需要CopyToAsync,因为我的代码已经在后台线程中执行。我只想有一个CopyTo重载,CancellationToken它每次复制 bufferSize 字节时都会检查它。有没有内置的实现?

0 投票
2 回答
5494 浏览

c# - parallel.foreach - loopState.Stop() 与 Cancellation

Cancellation 操作与 loopState 操作(Break/Stop)有什么区别?

为什么我要使用 ParallelOptions Cancellation 操作而不是loopState.Break();反之亦然loopState.Stop();

0 投票
2 回答
3567 浏览

c# - 取消令牌停止如何继续?

我有一个带有此代码的线程:

请注意,我使用return而不是break,因为如果我停止线程,则some operation 2不能执行。

我还注意到,以这种方式 .ContinueWith 它不会被执行。

好吧,但这只是一个“返回”功能。C# 怎么知道我是因为返回而tokenSource.Cancel()不是通常返回而返回?

0 投票
1 回答
2380 浏览

asp.net-web-api - Web API:使用 CancellationToken 的 DelegatingHandler

典型的 Web API DelegatingHandler 实现如下所示...

处理CancellationToken.IsCancellationRequested == true的首选方法是什么?

我是不是该:

  • 生成错误响应并中断委托链?
  • 什么都不做(如上)?
  • 选项“C”?