Итак, я читал об async / await и где-то, где-то я читал, что если вы не ждете метода asyn c, вы в основном его потеряете. Он срабатывает, забывает и переходит в AEeher, и если он выдает исключение - вы никогда не узнаете. Автор использовал следующий пример:
static async void OnButtonClick()
{
yolo();
string imageUrl = null;
try
{
DownloadAndBlur(imageUrl);
}
catch (Exception ex)
{
Console.WriteLine($"Exception: {ex}");
}
Console.WriteLine("Done!");
}
static async Task DownloadAndBlur(string url)
{
if (url == null)
{
throw new ArgumentNullException(nameof(url));
}
}
Действительно, если я вызываю метод OnButtonClick()
из моего кода, исключение не генерируется, или, скорее, ничего об исключении не выводится на консоль. Если я жду метода DownloadAndBlur
- в консоль записывается исключение.
Итак, я попытался воспроизвести поведение и написал следующее:
static async void Execute()
{
Console.WriteLine(1);
yolo();
Console.WriteLine(2);
}
static Task yolo()
{
throw new Exception();
}
Но возникает исключение и мой сеанс отладки улавливает это. Так что же другое, потому что я думаю, что они такие же.