问题标签 [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# - 使用没有 Task.Wait() 的 cancelToken
我有winforms app
一个长时间运行的任务和两个按钮。一键启动,一键停止。
当我按下开始按钮时,一个带有取消令牌的新任务就会启动。如果我按下停止按钮,取消令牌的取消方法就会被调用。
我希望 UI 始终可用,所以我在哪里放置 try, catch 块来完成这项工作。在我看到的所有例子中,他们都把它放在 t.Wait();
但是,如果我这样做,UI 会冻结,这就是我首先使用 Task 的原因,以便在执行任务时继续使用 ui。那么在不使用 Task.Wait 的情况下将 try catch 块放在哪里。
开始按钮:
停止按钮:
c# - 为什么 CancellationToken 与 CancellationTokenSource 是分开的?
CancellationToken
我正在寻找除了CancellationTokenSource
类之外还引入.NET 结构的理由。我了解如何使用 API,但也想了解为什么要这样设计。
即,为什么我们有:
而不是像这样直接传递CancellationTokenSource
:
这是基于取消状态检查比传递令牌更频繁发生的事实的性能优化吗?
这样就CancellationTokenSource
可以跟踪和更新CancellationTokens
,并且对于每个令牌,取消检查都是本地字段访问?
鉴于在这两种情况下没有锁定的 volatile bool 就足够了,我仍然不明白为什么会更快。
谢谢!
f# - F# Async.RunSynchronously 与 timeout 和 cancelToken
当使用超时和 CancellationToken 调用 Async.RunSynchronously 时,超时值似乎被忽略了。我可以通过在 CancellationToken 上调用 CancelAfter 来解决此问题,但理想情况下,我希望能够区分工作流中发生的异常 TimeOutExceptions 和 OperationCanceledExceptions。
我相信下面的示例代码证明了这一点。
输出如下,表明超时仅在第一种情况下有效(未指定 CancelationToken)
这是预期的行为吗?有没有办法得到我所追求的行为?
谢谢!
c# - 如何使用 CancellationToken 属性?
与前面的 RulyCanceler 类的代码相比,我想使用 CancellationTokenSource
.
如何使用Cancellation Tokens中提到的它,即不抛出/捕获异常?我可以使用该IsCancellationRequested
物业吗?
我试图这样使用它:
和
但这cancelToken.ThrowIfCancellationRequested();
在方法中给出了运行时错误Work(CancellationToken cancelToken)
:
我成功运行的代码在新线程中捕获了 OperationCanceledException:
c# - 将 CancellationToken 与异步方法的任务相关联
问题:有没有办法将 aCancellationToken
与方法Task
返回的值关联起来async
?
通常,如果 a与匹配的's一起抛出, aTask
将最终进入Canceled
状态。如果它们不匹配,则任务进入状态:OperationCancelledException
CancellationToken
Task
CancellationToken
Faulted
使用async
/ await
,我还没有找到设置方法的方法Task
(CancellationToken
从而实现相同的功能)。从我的测试来看,似乎任何 OperationCancelledException
都会导致该async
方法进入 Canceled 状态:
有更多的控制权会很好,因为如果我从我的方法调用的async
方法被取消(并且我不希望取消 - 即它不是 thisTask
的CancellationToken
),我希望任务进入Faulted
状态- -不是Canceled
国家。
c# - 获取任务取消令牌
我可以获取在任务操作执行期间CancellationToken
传递给Task
构造函数的内容吗?大多数示例如下所示:
但是,如果我的操作不是 lambda 而是放置在其他类中的方法并且我没有直接访问权限怎么办token
?token
唯一的方法是作为状态传递吗?
c# - 带有 CancellationToken 参数的 CopyTo
我看到CopyToAsync
有CancellationToken
争论。但我不需要CopyToAsync
,因为我的代码已经在后台线程中执行。我只想有一个CopyTo
重载,CancellationToken
它每次复制 bufferSize 字节时都会检查它。有没有内置的实现?
c# - parallel.foreach - loopState.Stop() 与 Cancellation
Cancellation 操作与 loopState 操作(Break/Stop)有什么区别?
为什么我要使用 ParallelOptions Cancellation 操作而不是loopState.Break();
反之亦然loopState.Stop();
?
c# - 取消令牌停止如何继续?
我有一个带有此代码的线程:
请注意,我使用return
而不是break
,因为如果我停止线程,则some operation 2
不能执行。
我还注意到,以这种方式 .ContinueWith 它不会被执行。
好吧,但这只是一个“返回”功能。C# 怎么知道我是因为返回而tokenSource.Cancel()
不是通常返回而返回?
asp.net-web-api - Web API:使用 CancellationToken 的 DelegatingHandler
典型的 Web API DelegatingHandler 实现如下所示...
处理CancellationToken.IsCancellationRequested == true的首选方法是什么?
我是不是该:
- 生成错误响应并中断委托链?
- 什么都不做(如上)?
- 选项“C”?