【发布时间】:2014-07-25 05:46:36
【问题描述】:
在异步方法中抛出异常时,我遇到了一些我无法理解的行为。
以下代码在调用 ThrowNow 方法时会立即抛出异常。如果我将该行注释掉并直接抛出异常,则异常会被吞没,不会在 Unobserved 事件处理程序中引发。
public static async void ThrowNow(Exception ex){
throw ex;
}
public static async Task TestExAsync()
{
ThrowNow(new System.Exception("Testing")); // Throws exception immediately
//throw new System.Exception("Testing"); // Exception is swallowed, not raised in unobserved event
await Task.Delay(1000);
}
void Main()
{
var task = TestExAsync();
}
有点混乱,如果我从 ThrowNow 方法中删除 async 关键字,异常会再次被吞没。
我认为异步方法会同步运行,直到到达阻塞方法。在这种情况下,删除 async 关键字似乎使其行为异步。
【问题讨论】:
标签: c# asynchronous async-await