【发布时间】:2019-02-05 04:25:48
【问题描述】:
我有一个关于使用cancellationToken 和cancellationTokenSource 取消任务的问题:
通常的方式如下:
var cts = new CancellationTokenSource();
var t = Task.Run(() => {
while(true)
{
if (!cts.IsCancellationRequested)
{ //do stuff }
}
}, cts.Token);
因此,while 循环会一直进行,直到请求令牌为止。
今天在学习Cancel()方法的时候发现可以使用Register()方法来定义其他代码在请求令牌时运行,所以我想知道,如果有人写这样的东西:
var cts = new CancellationTokenSouce();
token=cts.Token;
token.Register(
() => {
//do something to manage the cancel call
return;
};
)
var t = Task.Run(() => {
//do stuff
}, cts.Token);
通过这样做,与CancellationToken 关联的任务将立即停止执行,而不必像在通常的实现中那样完成当前的迭代。我的问题是:这是立即停止Task 的正确方法还是有更好的方法?
【问题讨论】:
标签: c# .net task .net-standard cancellation