gpt4 book ai didi

c# - 如果从静态构造函数启动并等待,为什么空的 .NET 任务无法完成?

转载 作者:太空狗 更新时间:2023-10-29 21:10:10 26 4
gpt4 key购买 nike

我不明白为什么下面的代码不起作用:

var task = new Task(() => { });
task.Start();
if (task.Wait(10000))
{
logger.Info("Works");
}
else
{
logger.Info("Doesn't work");
}

超时后任务状态卡在“运行中”,虽然没有什么可做的。但是,将 task.Start() 替换为 task.RunSynchronously() 会起作用。

有没有人知道我可能做错了什么?

可在此处找到重现该问题的测试项目:http://erwinmayer.com/dl/TaskTestProject.zip .据我所知,如果带有上述代码的方法在静态构造函数中运行,则它不起作用。但如果直接作为静态类方法调用,它会起作用。

这篇最近的 MSDN 博客文章似乎强调了与静态构造函数相关的问题:http://blogs.msdn.com/b/pfxteam/archive/2011/05/03/10159682.aspx

最佳答案

上下文在这里非常重要。当您启动这样的任务时,它会使用当前的调度程序 - 如果假设它将能够使用当前线程,那么在您等待它时实际上会陷入死锁。

相同的代码在不同的上下文中是可以的。

其他人说它对他们有用,但对你不起作用的原因是,毫无疑问,你在与其他人不同的上下文中运行这段代码 - 但你没有向我们展示一个简短的,但是 完整的程序,只有这个片段,所以每个人都在尝试以不同的方式重现它。 (我看到您现在已经上传了一个项目,这无疑会提供更多信息。当然,通常最好是可以在问题中发布的简短但完整的程序。)

关于c# - 如果从静态构造函数启动并等待,为什么空的 .NET 任务无法完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8594975/

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