对AggregateException Handle方法的混淆
本文关键字:方法 AggregateException Handle | 更新日期: 2023-09-27 18:29:02
ReSharper给了我一个CoVariantConversion警告,所以我决定用谷歌搜索这个问题,看看如何修复它
// ReSharper disable CoVariantArrayConversion
try
{
Task.WaitAll(taskList.ToArray());
}
catch (AggregateException ex)
{
ex.Handle(e => true);
}
// ReSharper restore CoVariantArrayConversion
这部分让我困惑:
ex.Handle(e => true);
它做什么?我认为它没有任何作用。
您是正确的:该行可以被删除,并具有与该行相同的效果(导致所有异常都被视为"已处理")。
它唯一有用的时候是lambda是否可以为某些异常返回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;
});
}
示例来自本文:异步编程-异常处理