3

ReSharper давал мне предупреждение CoVariantConversion, поэтому я решил это сделать и посмотреть, как его исправить. Я наткнулся на этот фрагмент кода:Confusion over AggregateException Метод обработки

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

Эта часть смущать меня:

ex.Handle(e => true); 

Что делать? Я думаю, что он ничего не делает.

ответ

0

Это говорит о том, что Исключение обрабатывается, и ничего больше.

3

Вы правы: линия может быть удалена и иметь тот же эффект (при этом все исключения будут считаться обработаны), как если бы линия была там.

Единственный раз, когда было бы полезно, если лямбда может вернуть false для некоторых исключений (чего в этом случае нет).

+1

я нашел некоторые документы из [Joseph Albahari] (Http: // www.albahari.com/threading/part5.aspx#_Working_with_AggregateException), который объясняет это хорошо. Я думаю, что документация MS запутанна, и у нее нет примера. – cahoskins

0

Вот пример, который показывает, как можно было бы использовать метод 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