這個例子 「失敗」:的try-catch異步異常
static async void Main(string[] args)
{
try
{
await TaskEx.Run(() => { throw new Exception("failure"); });
}
catch (Exception)
{
throw new Exception("success");
}
}
也就是說,與文本 「失敗」 異常堆滿了。
然後我嘗試以下解決方法:
static async void Main(string[] args)
{
try
{
await SafeRun(() => { throw new Exception("failure"); });
}
catch (Exception)
{
throw new Exception("success");
}
}
static async Task SafeRun(Action action)
{
var ex = default(Exception);
await TaskEx.Run(() =>
{
try
{
action();
}
catch (Exception _)
{
ex = _;
}
});
if (ex != default(Exception))
throw ex;
}
這並沒有幫助。
我想我的異步CTP刷新安裝可能會被解決。
這段代碼應該如我所期望的那樣工作(「成功」起來,而不是「失敗」),或者這不是「假設」以這種方式工作。如果不是,你將如何解決它?
它來自一個控制檯應用程序,用於測試異步,所以頂級方法是我的情況下的主要方法。 – 2011-06-16 21:58:38
@Bent我已經更新了答案,以反映你如何調用,這可能是也可能不是錯誤,但是由'async'入口點引起的未定義行爲 – 2011-06-18 16:25:22