C# AggregateException句柄方法的混淆

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给了我一个协变转换警告,所以我决定用谷歌搜索一下,看看如何修复它。我偶然发现了这段代码:

 // 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文档令人困惑,并且没有一个示例。