断点没有击中.Wait()

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)

FCi*_*Cin 8

僵局.你的主线程正在等待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的博客中了,所以我将在这里留下这个链接.