问题标签 [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 回答
1733 浏览

c# - 为什么 TaskFactory.StartNew 会收到 CancellationToken

可能重复:
任务构造函数中的取消标记:为什么?

此方法接收 CancellationToken:

既然取消是合作的(实际工作的代码需要观察取消令牌),那么将 this 作为参数传递给 StartNew 方法的目的是什么?

0 投票
1 回答
2465 浏览

c# - 如何保证 CancellationTokens 是最新的?

Microsoft在 .NET 4 中给出了这个使用示例CancellationToken

但是,我的理解是,如果在一个线程上修改了变量,由于缓存,另一个线程可能无法获得修改后的值。并且由于在CancellationToken主线程上取消了,线程如何Task确保CancellationToken它正在检查实际上是最新的?

为什么不能Task读取令牌的缓存值?

注意:我提出这个问题的动机是想知道我是否需要CancellationToken将实例变量设置为volatile.

0 投票
6 回答
25392 浏览

.net - 带有取消令牌的 NetworkStream.ReadAsync 永远不会取消

这里证明。
知道这段代码有什么问题吗?

0 投票
2 回答
422 浏览

f# - 在 Async.FromContinuations 声明中获取取消标记

考虑以下定义

假设我想像这样尝试计算

这自然不会使内部循环停止,因为我没有传递合适的取消令牌。有什么方法可以通过 Async.FromContinuations 获取外部取消令牌?我可以使用异步构建器和 Async.CancellationToken 重写它,但是我将失去将延续传递给内部表达式的能力。

0 投票
1 回答
995 浏览

asp.net-mvc - MVC 使用取消令牌取消任务

我想使用此处所述的取消令牌取消任务:http: //msdn.microsoft.com/en-us/library/dd997396.aspx

唯一的区别是:

我想在浏览到特定控制器/操作时启动一项任务,并在我离开时取消要调用的任务(tokenSource.Cancel()),浏览远离我当前正在执行的特定操作(页面)。我该怎么做?谢谢

0 投票
4 回答
9514 浏览

c# - 停止线程、ManualResetEvent、volatile boolean 或 cancelToken

我在 Windows 服务中有一个线程 (STAThread),它执行大量工作。当 Windows 服务重新启动时,我想优雅地停止这个线程。

我知道几种方法

  • 一个不稳定的布尔值
  • 手动复位事件
  • 取消令牌

据我发现 Thread.Abort 是不行的......

最佳做法是什么?这项工作是在另一个类中执行的,而不是启动线程的类,因此有必要在构造函数中引入 cancelToken 参数,或者例如具有一个 volatile 变量。但我就是不知道什么是最聪明的。

更新
只是为了澄清一点,我已经总结了一个非常简单的例子来说明我在说什么。如前所述,这是在 Windows 服务中完成的。现在我在想一个在循环中检查的 volatile boolean 或 cancelToken.... 我不能等待循环完成,如下所述,它可能需要几分钟,使服务器的系统管理员相信当他们需要重新启动服务时,服务出现问题......接口被调用,因此需要进行小清理。

更新
刚刚检查了性能,使用在代码中“检查”isCancelled 状态的cancellationToken 比在ManualResetEventSlim 上使用waitOne 快得多。一些快速计算者,如果在 cancelToken 上在 for 循环中迭代 100.000.000 次,我大约花费了我。500 毫秒,其中 WaitOne 的成本约为。3 秒。因此在这种情况下的性能使用cancellationToken 会更快。

0 投票
2 回答
756 浏览

.net-4.5 - 异步存储库和 CancellationToken

我们正在迁移到 .NET 4.5,我正在考虑将异步添加到我的存储库中:

实现可能会调用 DB、WebServices 等。

我的问题是,我应该支持 CancellationToken 吗?

(别担心 - FindAllAsync() 可能是基于 Rx 的:))

0 投票
1 回答
1140 浏览

.net - 如果无法轮询 CancellationToken,则提供取消

这是一个阻塞调用者线程但不支持取消的方法的(愚蠢的)示例:

在最坏的情况下,调用此方法需要 17 小时才能返回。假装我无权访问此方法的源代码。如何将调用包装在采用 CancellationToken 的方法中?

目标是让WorkUntil5()运行直到请求取消。此时应使用任何可能的方式终止呼叫。

这是我自己想出的最好方法。它使用任务,但它仍然阻塞调用者的线程。感觉有些不对劲。mres.Set()认为一旦第一个呼叫返回,应该有更好的呼叫方式。

0 投票
1 回答
7925 浏览

c# - await 方法中的取消令牌

在任务的构造函数中放置令牌有很多原因,这里提到: 任务构造函数中的取消令牌:为什么?

使用关键字 async / await,它是如何工作的?例如我下面的代码:

虽然它是一个异步过程。我很快就使用了“Task.StartNext”或“Task.Run”或“新任务”。为了能够指定我的取消令牌,我该怎么做?

0 投票
3 回答
5170 浏览

c# - CancellationToken 取消注册操作

我有一个用于各种任务的令牌,我需要更好地管理它们的取消,以便收到我可以使用的取消通知:

如何删除此“订阅”?有没有办法“取消注册”?

我想过用 TaskCompletionSource 做一个解决方法。但我不知道它是否会运作良好。解决这种方法的最佳方法是什么?