.Wait() 后断点未命中

Breakpoint not hitting after .Wait()

我有一个 .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 留在这里。