有多种方法可以观察任务中抛出的异常。其中一个是带有OnlyOnFaulted的ContinueWith:
var task = Task.Factory.StartNew(() =>
{
// Throws an exception
// (possibly from within another task spawned from within this task)
});
var failureTask = task.ContinueWith((t) =>
{
// Flatten and loop (since there could have been multiple tasks)
foreach (var ex in t.Exception.Flatten().InnerExceptions)
Console.WriteLine(ex.Message);
}, TaskContinuationOptions.OnlyOnFaulted);
我的问题:一旦failureTask开始,是否会自动观察异常,或者只有在我触摸'ex.Message后才会观察到异常?
答案 0 :(得分:10)
访问Exception
媒体资源后,系统会将其视为观察。
另见AggregateException.Handle
。您可以改为使用t.Exception.Handle
:
t.Exception.Handle(exception =>
{
Console.WriteLine(exception);
return true;
}
);
答案 1 :(得分:2)
样本
Task.Factory.StartNew(testMethod).ContinueWith(p =>
{
if (p.Exception != null)
p.Exception.Handle(x =>
{
Console.WriteLine(x.Message);
return false;
});
});