Путаница в методе AggregateException Handle

ReSharper предупреждал меня о CoVariantConversion, поэтому я решил зайти в Google и посмотреть, как это исправить. Я наткнулся на этот фрагмент кода:

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

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

 ex.Handle(e => true);

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

3 ответа

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

Единственное время, которое было бы полезно, - это если бы лямбда могла возвращать 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;
    });
}

Пример взят из этой статьи: Асинхронное программирование - обработка исключений

Другие вопросы по тегам