我仍然试图了解如何以及何时在asp.net中使用async
方法,我可以问十几个关于它的问题,但这种行为对我来说是令人惊讶的.. 。如果我创建一个async
方法但是将其声明为void
,然后不等待它,那么我已经阅读了所有内容,它基本上就像你刚刚运行它一样工作线程上的异步代码,没有闲逛以获得结果。也就是说,空格会立即返回给调用者,调用者可以开始它的业务,并可能在async
方法之前完成。但在我的.net核心应用程序中,绝对不是这样。我有一个async void
,我从另一个异步方法调用,虽然我没有await
它async
代码上的线程阻塞。这里发生了什么?
感谢。
答案 0 :(得分:7)
我仍然试图了解如何以及何时在asp.net中使用异步方法
你在以下时间使用它们:
它基本上就像你在工作线程上运行那个异步代码一样
没有。 async void
只是阻止调用者检测它何时完成。它仍然在与调用者相同的上下文中运行,就像async Task
方法一样。
异步代码上的线程阻塞
您的“异步”代码可能实际上是同步的。如果它没有await
,则编译器会警告您它是同步的。
您可能会发现我的intro to async
博文和async
on ASP.NET MSDN文章很有帮助。就async
而言,ASP.NET Core只改变了一些事情:1)没有更多的ASP.NET请求上下文,2)整个管道是异步兼容的,所以像异步过滤器和异步视图组件正常工作。