问题标签 [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 投票
5 回答
50610 浏览

c# - CancellationToken 的默认参数

我有一些我想添加的异步代码CancellationToken。但是,有许多实现不需要这样做,所以我想有一个默认参数 - 也许CancellationToken.None. 然而,

产量

“<null>”类型的值不能用作默认参数,因为没有标准转换为“System.Threading.CancellationToken”类型

'ct' 的默认参数值必须是编译时常量

有什么方法可以设置默认值CancellationToken吗?

0 投票
4 回答
58130 浏览

c# - 在 Task.Run 中使用 CancellationToken 超时不起作用

好的,我的问题很简单。为什么这段代码不抛出TaskCancelledException

但这一个有效

0 投票
3 回答
3310 浏览

c# - 如何使用取消令牌取消 C# 中的阻塞任务?

我有一个始终被阻止的任务,并且我有一个 CancellationToken 传递给它,用于取消任务。然而,Continuation 任务永远不会执行,它设置为在 Task 取消时执行。代码是:

稍后在代码的其他地方......

我必须为 _stream.StartStream() 使用任务的原因是这个调用永远阻塞(我无法控制的 api,请注意 _stream 指的是从 web 服务流数据的第三方 Api)所以我不得不调用它在另一个线程上。

取消任务的最佳方法是什么?

0 投票
1 回答
642 浏览

c# - 取消 CancellationToken 时如何运行代码?

给定一个 CancellationToken,我想在取消 CancellationToken 时对表示异步操作的对象调用“取消”方法。这可能吗?

背景:我正在通过以下方式(或多或少)与代表异步操作的 API 交互:

我可以很容易地将它包装在一个方法中Task DoAsyncOp(),但我想支持取消,例如Task DoAsyncOp(CancellationToken cancellationToken). 就我而言,当取消 CancellationToken 时,请在 AsyncOp 对象上调用 Cancel。

0 投票
1 回答
2642 浏览

c# - 如何将 CancellationToken 与 Azure 服务总线队列客户端一起使用?

在Azure Service Bus队列客户端中,我使用了ReceiveBatchAsync等待指定时间异步接收一批消息的方法。

我想彻底关闭我的应用程序,所以我CancellationToken在所有长时间运行的异步进程上实现,但似乎没有可以ReceiveBatchAsync取消的过载。

换句话说,我想这样做,但我不能:

将 a 应用于CancellationToken不直接提供它的此类任务的最佳方法是什么?我不想在关机期间等待整个 30 秒。

0 投票
1 回答
357 浏览

c# - Task.RunSynchronously() 不关心 CancellationToken

我想在当前线程上执行第 3 方函数(以避免开销),但希望能够随时使用CancellationToken来中断该函数。

这就是我创建和运行任务的方式:

cts.Cancel()(在单独的线程上)被调用后,任务不会停止

我在 F# 中找到了一个可以解决问题的静态函数:

我确信应该有一个简单的 C# 解决方案,你能帮我吗?

0 投票
2 回答
774 浏览

c# - 请求 CancellationToken 时是否必须使用 CancellationTokenSource?

这个MSDN 示例可以不使用 来编写CancellationTokenSource,可以直接使用 CancellationToken。

可以直接使用 aCancellationToken还是不应该做的事情?我没有在 MSDN 上看到任何直接使用的示例,如果可以这样做的话,这会让我更加痛苦。

更新

下面的 Cod 使用一小组测试用例扩展了可接受的答案,这些测试用例证明它CancellationToken是不可变的,因此CancellationTokenSource如果需要控制令牌,则必须使用它。

值得一提的是CancellationTokenSource ,每次调用时 Token 属性都会返回新对象

0 投票
1 回答
2283 浏览

c# - 如何在没有 LOOP 的情况下取消任务

嗨,我一直在论坛上阅读了很多,但我无法找到我的问题的答案......

这是我想要在布尔值变为 TRUE 时取消的函数:

如何验证令牌是否在没有 LOOP 的情况下收到取消请求?

类似的东西:

但我没有需要循环的操作,所以我不知道该怎么做......

0 投票
2 回答
893 浏览

c# - CancellationTokenSource 未按预期运行

在这种情况下,预期的是,如果用户通过按 Enter 取消任务,则被钩住的另一个任务ContinueWith将运行,但事实并非如此,尽管显然没有执行其中AggregateException的显式处理,但仍然抛出。 请对以下内容进行任何澄清?ContinueWith

0 投票
1 回答
11012 浏览

c# - 捕获 TaskCanceledException 并检查 Task.Canceled 是个好主意吗?

我的团队中有一些人非常喜欢使用 async 进行编码Task。有时他们喜欢使用CancellationToken参数。

我不确定的是我们是否应该作为一个团队使用这种代码风格(A):

这显然意味着调用者可能必须自己检查取消令牌以确定是否继续处理,并且他们可能必须处理 null retVals:

但是,如果我们采用依赖于 TaskCanceledException 的第二种代码 (B) 样式:

实现代码肯定更简单 - 调用者可以选择是否处理异常,视情况而定......但我不禁担心调用者可能会忘记TaskCanceledException 是他们必须担心的事情,并且进程可能会崩溃由于他们没有捕捉到这些异常(在前台或后台线程上)。

所以,我过于乐观的问题是:你认为哪种风格是每个人都应该经常使用的最佳风格,为什么?:)