Каков наилучший подход для обработки исключения задачи, которая не выполняет функцию Wait()? Я прочитал пару блогов, в которых говорилось об использовании ContinueWith, потому что регулярный try/catch не может обрабатывать исключение Task. Ниже код не подтверждает это.Обработка исключений по задачам без ожидания()
Метод 1:
public class Service1 : IService1
{
public string GetData(int value)
{
var a = Task.Factory.StartNew(ThrowException);
return string.Format("You entered: {0}", value);
}
private void ThrowException()
{
try
{
Thread.Sleep(6000);
throw new ArgumentException("Hello from exception");
}
catch (Exception)
{
Trace.WriteLine("Log it");
}
}
}
Метод 2:
public class Service1 : IService1
{
public string GetData(int value)
{
var a = Task.Factory.StartNew(ThrowException);
a.ContinueWith(c => { Trace.WriteLine("Log it"); },
TaskContinuationOptions.OnlyOnFaulted);
return string.Format("You entered: {0}", value);
}
private void ThrowException()
{
Thread.Sleep(6000);
throw new ArgumentException("Hello from exception");
}
}
ли способ 1 и способ 2 делает то же самое? Есть ли лучший способ реализовать это.
Редактировать: Добавлен фрагмент кода для продолжения.
Вы хотите создать задачу «огонь и забыть»? –
это право. Моя конечная цель состоит в том, чтобы в конце моей существующей бизнес-логики иметь метод пожара и забывания. – Faraaz
Вы можете «подождать» задачу в блоке 'try/catch' и скрывать исключения. –