Путаница в методе 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;
});
}
Пример взят из этой статьи: Асинхронное программирование - обработка исключений