当我遇到这个时,我正在用 ASP.NET 编写一些代码:
protected async void someButtonClickHandler(...)
{
if(await blah)
doSomething();
else
doSomethingElse();
}
询问后this问题 我对 async
/await
的工作原理有了更好的理解。但后来我突然想到,以上述方式使用 async
/await
是否安全?
我的意思是在调用 await blah
之后,调用者继续执行。这意味着它可能会在 await blah
完成之前将响应返回给客户端。这是正确的吗?如果是这种情况,doSomething()
/doSomethingElse()
会发生什么。他们会被处决吗?如果它们被执行,用户会看到它们的更改效果吗?
在我的例子中,这些方法改变了一些显示给用户的数据,但我也想知道在一般情况下会发生什么。
最佳答案
是的,它是安全的,但并不真正推荐。 recommended way to do this is via RegisterAsyncTask
.但是,ASP.NET(Web 窗体)将正确处理 async void
事件处理程序。
当处理程序 await
时,响应不会呈现给客户端; await
只让步给 ASP.NET 运行时,而不给客户端。 ASP.NET 运行时知道事件处理程序尚未完成,因此它知道不发送响应。当事件处理程序完成时,ASP.NET 运行时通过发送响应来响应。
我有一个 MSDN article on async ASP.NET你可能会觉得有帮助。如果您对 ASP.NET 运行时如何意识到 async
处理程序尚未完成感到好奇,我将在 an earlier MSDN article 中介绍它。 .
关于c# - 在 ASP.NET 事件处理程序中使用 async/await 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27282617/