我有一个.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/

10-13 06:53