dar*_*ala 4 c# task-parallel-library
考虑这个Task.Run例子.它显示了如何创建具有取消支持的任务.
我正在做类似的事情:
Task.Run(()=>{while (!token.IsCancellationRequested()) {...}}, token);
Run Code Online (Sandbox Code Playgroud)
我的问题:
既然我已经有了对取消令牌的引用,为什么将它作为参数传递给Task.Run调用呢?
我经常在示例中看到以下代码:
if (token.IsCancellationRequested) token.ThrowIfCancellationRequested();
这段代码的目的是什么?为什么不return从方法?
如果您将取消令牌传递给Task.Run,如果在启动任务之前取消令牌,则永远不会启动它来保存资源(我的意思是不创建线程等).
如果你只是从方法返回,任务的状态将不会Canceled,它将是RanToCompletion.显然,这不是你所期望的.
或者你可以OperationCanceledException使用CancellationTokenas参数抛出,这将使得它Task.Status成为Canceled,但这是艰难而冗长的方式.token.ThrowIfCancellationRequested很简洁.
你可以简单地使用token.ThrowIfCancellationRequested();,无需检查token.IsCancellationRequested.ThrowIfCancellationRequested方法已经这样做了.
| 归档时间: |
|
| 查看次数: |
431 次 |
| 最近记录: |