gpt4 book ai didi

c# - 为什么未等待的异步方法不抛出异常?

转载 作者:可可西里 更新时间:2023-11-01 08:41:19 24 4
gpt4 key购买 nike

我认为异步方法在到达等待之前应该像普通方法一样表现。

为什么这不会抛出异常?

有没有办法在不等待的情况下抛出异常?

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. 等待 任务:t.Helper().Wait();
  3. 在任务完成后检查任务的Exception属性:var task = t.Helper();日志(任务.Exception);
  4. 向处理异常的任务添加延续:t.Helper().ContinueWith(t => Log(t.Exception), TaskContinuationOptions.OnlyOnFaulted);

您最好的选择是第一个。只需 await 任务并处理异常(除非有特定原因您不能这样做)。更多内容 Task Exception Handling in .NET 4.5

关于c# - 为什么未等待的异步方法不抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24441790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com