C# TaskContinuationOptions.OnlyonCancelled创建取消
以下代码为异常:C# TaskContinuationOptions.OnlyonCancelled创建取消,c#,C#,以下代码为异常: exception details: A task was canceled. 只是想知道为什么要添加TaskContinuationOptions。只有取消的参数才能取消任务。没有这个选项,一切都会好起来。我希望这个选项会执行代码,以防有什么东西会取消任务。看起来像是onlyonCancelled创建取消 class Program { static void Main(string[] args) { Co
exception details: A task was canceled.
只是想知道为什么要添加TaskContinuationOptions。只有取消的参数才能取消任务。没有这个选项,一切都会好起来。我希望这个选项会执行代码,以防有什么东西会取消任务。看起来像是onlyonCancelled
创建取消
class Program
{
static void Main(string[] args)
{
Console.WriteLine("starting");
Task<int> t = Task.Run(() => 42)
.ContinueWith((i) =>
{
Console.WriteLine("Canceled");
return i.Result * 2;
}, TaskContinuationOptions.OnlyOnCanceled);
Console.WriteLine("ending");
try
{
Console.WriteLine("ret {0}", t.Result);
}
catch (AggregateException ae)
{
ae.Handle(ex => { Console.WriteLine("exception details: {0}",ex.Message);
return true;
});
}
Console.ReadLine();
}
类程序
{
静态void Main(字符串[]参数)
{
控制台写入线(“启动”);
Task t=Task.Run(()=>42)
.继续((i)=>
{
控制台。写入线(“取消”);
返回一、结果*2;
},TaskContinuationOptions。仅限已取消);
控制台。写入线(“结束”);
尝试
{
WriteLine(“ret{0}”,t.Result);
}
捕获(聚合异常ae)
{
Handle(ex=>{Console.WriteLine(“异常详细信息:{0}”,ex.Message);
返回true;
});
}
Console.ReadLine();
}
onlyonCancelled
告诉ContinueWith
方法中定义的第二个任务仅在父任务被取消时运行
由于第一个任务未被取消,第二个任务将被取消,因为它不应该运行。onlyonCancelled
告诉在ContinueWith
方法中定义的第二个任务,只有在父任务被取消时才运行
由于第一个任务未被取消,第二个任务将被取消,因为它不应运行