【发布时间】:2020-05-10 06:20:00
【问题描述】:
所以我在 async/await 和某个地方读到过,如果你不等待异步方法,你基本上会丢失它。它会触发并忘记并进入 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();
}
但是抛出了一个异常,我的调试会话捕获了它。那么有什么不同,因为我认为它们是相同的。
【问题讨论】:
-
static Task yolo()不是异步方法,这是一个返回Task类型值的方法。
标签: c# asynchronous async-await