对AggregateException Handle方法的困惑

时间:2013-08-26 19:05:09

标签: c# lambda resharper task-parallel-library aggregateexception

ReSharper给了我一个CoVariantConversion警告,所以我决定谷歌这个,看看如何解决它。我遇到了这段代码:

 // ReSharper disable CoVariantArrayConversion
 try
 {
    Task.WaitAll(taskList.ToArray());
 }
 catch (AggregateException ex)
 {
    ex.Handle(e => true);
 }
 // ReSharper restore CoVariantArrayConversion

这部分令我困惑:

 ex.Handle(e => true);

它做什么?我认为它什么也没做。

3 个答案:

答案 0 :(得分:3)

你是对的:可以删除该行并具有相同的效果(导致所有异常被视为“已处理”),就好像该行在那里一样。

唯一有用的时间是lambda是否会因某些异常而返回false(在这种情况下它不会)。

答案 1 :(得分:1)

这就是说,处理异常,没有别的。

答案 2 :(得分:1)

以下示例显示如何使用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;
    });
}

示例来自本文:Asynchronous Programming - Exception Handling