簡體   English   中英

為什么unawaited異步方法不會拋出異常?

[英]Why do unawaited async methods not throw exceptions?

我認為異步方法應該像普通方法一樣,直到他們到達等待。

為什么這不會拋出異常?

有沒有辦法在沒有等待的情況下拋出異常?

using System;
using System.Threading.Tasks;

public class Test
{
    public static void Main()
    {
        var t = new Test();
        t.Helper();
    }

    public async Task Helper()
    {
        throw new Exception();
    }
}

async方法中拋出的異常按照設計存儲在返回的任務中。 要獲得例外,您可以:

  1. await任務: await t.Helper();
  2. Wait任務: t.Helper().Wait();
  3. 任務完成檢查任務的Exception屬性: var task = t.Helper(); Log(task.Exception); var task = t.Helper(); Log(task.Exception);
  4. 為處理異常的任務添加一個延續: t.Helper().ContinueWith(t => Log(t.Exception), TaskContinuationOptions.OnlyOnFaulted);

你最好的選擇是第一個。 只需await任務並處理異常(除非有特殊原因你不能這樣做)。 更多在.NET 4.5中的任務異常處理

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM