C# 异步作为方法结果管理器?

C# 异步作为方法结果管理器?,c#,async-await,C#,Async Await,: “async”关键字启用该方法中的“wait”关键字和 更改处理方法结果的方式。这就是所有的async关键字 是的 第二部分让我很感兴趣,但我没有在文章中找到对此的解释 做一个小测试(注意-这里没有等待的任务): 将产生: 什么也没说: 如果async关键字修改的方法不包含等待 表达式或语句,则该方法同步执行。编译程序 警告提醒您任何不包含wait的异步方法, 因为这种情况可能表明有错误 问题 如果是这样,那么还有什么词是async使我的代码产生不同结果的呢 async方法捕获所有异常,不

:

“async”
关键字启用该方法中的“wait”关键字 更改处理方法结果的方式。这就是所有的async关键字 是的

第二部分让我很感兴趣,但我没有在文章中找到对此的解释

做一个小测试(注意-这里没有等待的任务):

将产生:

什么也没说:

如果async关键字修改的方法不包含等待 表达式或语句,则该方法同步执行。编译程序 警告提醒您任何不包含wait的异步方法, 因为这种情况可能表明有错误

问题


如果是这样,那么还有什么词是
async
使我的代码产生不同结果的呢

async
方法捕获所有异常,不向方法的调用方抛出它们,而是将它们包含在从方法返回的
任务中,将其标记为有故障的
任务。如果该方法是
async void
,则会在应用程序级别抛出错误,正如您所看到的,因为无法通过
任务观察异常

,我也不确定为什么它会被否决。在我看来,这是一个很好的问题。斯泰芬·克利里的新文章详细介绍了异常。这在低质量队列中得到了体现。我不明白为什么,但结果是审计。所以不准确。结合使用void,它会在应用程序级别引发异常。它不仅允许等待keyword@RoyiNamir不,那没有错。该引用特别提到它改变了方法结果的处理方式,在本例中,改变了异常的传播方式。@Servy Yes。我没有读第二部分。对不起,谢谢:-)
  static void X()
    {
        try
        {
            Y();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    static async void Y() //<---- notice here
    {
        throw new NotImplementedException();
    }


    static void Main(string[] args)
    {
        X();

        Console.ReadLine();
    }
 static async void Y()  
    {
        throw new NotImplementedException();
    }