gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:35:50 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com