C# AggregateException句柄方法的混淆
ReSharper给了我一个协变转换警告,所以我决定用谷歌搜索一下,看看如何修复它。我偶然发现了这段代码:C# AggregateException句柄方法的混淆,c#,lambda,resharper,task-parallel-library,aggregateexception,C#,Lambda,Resharper,Task Parallel Library,Aggregateexception,ReSharper给了我一个协变转换警告,所以我决定用谷歌搜索一下,看看如何修复它。我偶然发现了这段代码: // ReSharper disable CoVariantArrayConversion try { Task.WaitAll(taskList.ToArray()); } catch (AggregateException ex) { ex.Handle(e => true); } // ReSharper restore CoVariantArr
// ReSharper disable CoVariantArrayConversion
try
{
Task.WaitAll(taskList.ToArray());
}
catch (AggregateException ex)
{
ex.Handle(e => true);
}
// ReSharper restore CoVariantArrayConversion
这部分让我很困惑:
ex.Handle(e => true);
它有什么作用?我认为它什么也没做。这意味着,异常被处理了,其他什么都没有。您是正确的:可以删除该行,并具有与该行相同的效果(导致所有异常都被视为“已处理”)
它唯一有用的时候是lambda可以为某些异常返回false(在本例中不会返回false)。下面是一个示例,展示了如何使用Handle方法:
Task task = Task.Factory.StartNew(() =>
{
throw new UnauthorizedAccessException();
});
try
{
task.Wait();
}
catch (AggregateException ex)
{
ex.Handle(x =>
{
if (x is UnauthorizedAccessException)
{
// Handle this exception...
return true;
}
// Other exceptions will not be handled here.
return false;
});
}
示例来自本文:我从中找到了一些文档,很好地解释了这一点。我认为MS文档令人困惑,并且没有一个示例。