Async和Await - 将立即从MVC操作方法控制返回吗?

Ran*_*der 2 c# asp.net-mvc async-await

我正在学习如何使用异步和等待.假设我有以下发送电子邮件的方法:

public async void Send()
{
    // Create a network credentials object
    var credentials = new NetworkCredential(azureUserName, azurePassword);

    // Create an Web transport for sending the email
    var transportWeb = new Web(credentials);

    // Send the email
    await transportWeb.DeliverAsync(this._email);
}
Run Code Online (Sandbox Code Playgroud)

此代码将存在于我正在创建的MVC应用程序中.用户将在浏览器中启动一些操作,并且将调用控制器操作方法,并且最终将在操作方法中调用此电子邮件方法.

我的理解是,一旦执行了最后一行(带有等待的行),控制立即返回给调用者,而DeliverAsync方法完成其任务.假设这是正确的,我们还假设电子邮件需要很长时间才能发送,可能需要30秒.即使DeliverAsync方法仍在尝试执行发送,控制器操作方法是否会将控制权返回给浏览器?理想情况下,这就是我想要发生的事情.

usr*_*usr 5

你的理解是正确的.不要使用async void,不需要.使用async Task并确保处理错误.现在你永远不会发现导致崩溃的错误.

即使DeliverAsync方法仍在尝试执行发送,控制器操作方法是否会将控制权返回给浏览器?

这取决于该方法的作用.它的代码不在这里.现在它无法等待Send,可能是的.

同样重要的是要注意,ASP.NET中的后台工作可能会在工作进程退出(部署,重新启动,崩溃......)时随时死亡.