我有一个 .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);
}
最佳答案
僵局。您的主线程正在等待 attachTask
完成,而 attachTask
无法完成,因为它正在等待主线程。
将 ConfigureAwait(false)
添加到 Task.Delay
或正确执行并等待 attachTask
应该这样写:
public async Task<IHttpActionResult> Get() {
var attachTask = AttachNewTasksAsync();
//do something else
await attachTask;
return Ok();
}
如何保证即使有人同步等待也不会发生死锁?使用 ConfigureAwait(false)
。
public async System.Threading.Tasks.Task AttachNewTasksAsync()
{
await System.Threading.Tasks.Task.Delay(10000).ConfigureAwait(false);
}
Stephen Cleary 的博客还没有涵盖我可能没有什么可以写的,所以我将离开这个 link在这里。
关于c# - .Wait() 后断点未命中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51705917/