WtF*_*dgE 2 c# async-await asp.net-web-api2
我有一个.net web api 2方法,我试图让我的代码的某些部分在一个单独的线程中做一些事情,但是当我在任务上调用.Wait()方法之后,它永远不会到达下一行.我必须忽略一些东西,但我似乎无法找到它.这是一个非常简单的问题版本.Ok()行永远不会被击中.有什么建议?
public IHttpActionResult Get() {
var attachTask = AttachNewTasksAsync();
//do something else
attachTask.Wait();
return Ok();
}
public async System.Threading.Tasks.Task AttachNewTasksAsync()
{
await System.Threading.Tasks.Task.Delay(10000);
}
Run Code Online (Sandbox Code Playgroud)
僵局.你的主线程正在等待attachTask完成,attachTask 无法完成,因为它正在等待主线程.
无论是添加ConfigureAwait(false)到Task.Delay或正确地做到这一点,等待attachTask
这是应该写的:
public async Task<IHttpActionResult> Get() {
var attachTask = AttachNewTasksAsync();
//do something else
await attachTask;
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
即使有人同步等待,如何确保不会发生死锁?使用ConfigureAwait(false).
public async System.Threading.Tasks.Task AttachNewTasksAsync()
{
await System.Threading.Tasks.Task.Delay(10000).ConfigureAwait(false);
}
Run Code Online (Sandbox Code Playgroud)
可能没有什么我可以写的,这已经不在Stephen Cleary的博客中了,所以我将在这里留下这个链接.
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |