c# - .Wait() 后断点未命中

标签 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);
}

最佳答案

僵局。您的主线程正在等待 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/

相关文章:

c# - 选择子句问题中的动态列

flutter - 如何等待相机初始化?

c# - 如何从 C# 调用 JavaScript - Cordova/PhoneGap

javascript - 在异步函数中捕获未捕获的异常 (Javascript)

asp.net - 异步代码,无需等待完成

c# - 如何在 .Net Web Api 上记录每个方法的执行时间和参数

javascript - Asp.net WebApi Aspose.Cells - 导出和下载 Excel

c# - WebAPI Controller 继承和属性路由

c# - 使用 C# 解析 XML 文件?

c# - 使用标准Window 与wxWidgets 一起绘制成?