У меня есть этот фрагмент кода:
class Program
{
public static async Task ProcessAsync(string s)
{
Console.WriteLine("call function");
if (s == null)
{
Console.WriteLine("throw");
throw new ArgumentNullException("s");
}
Console.WriteLine("print");
await Task.Run(() => Console.WriteLine(s));
Console.WriteLine("end");
}
public static void Main(string[] args)
{
try
{
ProcessAsync(null);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
}
Он запускается и печатает:
call function
throw
Хорошо, исключение выдается, но try / catch основной функции не в состоянии перехватить исключение, если я удаляю try / catch, main также не сообщает о необработанном исключении Это очень странно, я гуглил и говорит, что в [await] есть ловушка, но не объясняет, как и почему.
Итак, мой вопрос, почему здесь не обнаруживается исключение, в чем ловушки использования await?
Большое спасибо.