【发布时间】:2015-09-06 05:35:26
【问题描述】:
假设我有一个像下面这样的操作,我想尽快返回视图并继续在后台线程中做一些工作。
public async Task<ActionResult> Index()
{
Debug.WriteLine("Inside Index");
var newCustomer = new Customer
{
Name = "Ibrahim"
};
Task.Run(() => SaveCustomer(newCustomer));
Debug.WriteLine("Exiting Index");
return View();
}
private async Task SaveCustomer(Customer NewCustomer)
{
Debug.WriteLine("Started Saving Customer");
await Task.Delay(2000);
Debug.WriteLine("Completed Saving Customer");
}
我确实得到了预期的输出,即:
Inside Index
Exiting Index
Started Saving Customer
Completed Saving Customer
但令我困扰的是,我收到警告说我的Index 操作将同步运行,我应该放置一个await,但是在SaveCustomer 完成后返回视图并且目的被打败了。
我怎么做错了?任何建议表示赞赏。
【问题讨论】:
-
可能有点跑题了——但是如果
SaveCustomer(newCustomer)失败了怎么办?当前的请求不应该意识到这一点吗? -
@shay__ 是的,当然。但这只是一个例子。我只是想知道我想做的是否正确。
-
例如可以作为日志机制而不是保存客户
标签: asp.net-mvc multithreading asynchronous async-await task-parallel-library