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方法仍在尝试执行发送,控制器操作方法是否会将控制权返回给浏览器?理想情况下,这就是我想要发生的事情.
你的理解是正确的.不要使用async void,不需要.使用async Task并确保处理错误.现在你永远不会发现导致崩溃的错误.
即使DeliverAsync方法仍在尝试执行发送,控制器操作方法是否会将控制权返回给浏览器?
这取决于该方法的作用.它的代码不在这里.现在它无法等待Send,可能是的.
同样重要的是要注意,ASP.NET中的后台工作可能会在工作进程退出(部署,重新启动,崩溃......)时随时死亡.