ykh*_*ykh 2 .net c# winforms task-parallel-library cancellation
我读到了取消方法,但根据我的理解,它们都提供了对任务外部任务的控制,但是如果我想从内部取消任务.
例如,在这个伪代码中:
Task tasks = new Task(() =>
{
bool exists = CheckFromDB();
if (!exists)
break;
}
Run Code Online (Sandbox Code Playgroud)
我可以从内部取消任务吗?我得到的唯一想法是在任务中触发一个异常并从外部处理它,但是这不是一种方法.
如果你想真正取消任务(例如,在完成后将Status属性设置为Canceled),你可以这样做:
var cts = new CancellationTokenSource();
var token = cts.Token;
Task innerCancel = new Task(
() =>
{
if (!CheckFromDB())
{
cts.Cancel();
}
token.ThrowIfCancellationRequested();
},
token);
Run Code Online (Sandbox Code Playgroud)
当你使用return任务时实际上不会被取消,而是在return语句不会被执行后代码,而任务本身将其状态为RanToCompletion.
另外,建议使用Task.Factory.StartNew.NET 4和Task.Run.NET 4.5而不是构造函数来创建任务.
| 归档时间: |
|
| 查看次数: |
1597 次 |
| 最近记录: |