C# 任务和线程不';t在Linqpad中的静态构造函数中运行
此代码在C# 任务和线程不';t在Linqpad中的静态构造函数中运行,c#,linqpad,static-constructor,C#,Linqpad,Static Constructor,此代码在t.Wait()行无限期地等待 void Main() { Foo.Bar(); } public static class Foo { static Foo() { var t = Task.Factory.StartNew (() => 1); t.Wait(); "Done".Dump(); } public static void Bar() { } } 我希望这项
t.Wait()
行无限期地等待
void Main()
{
Foo.Bar();
}
public static class Foo
{
static Foo()
{
var t = Task.Factory.StartNew (() => 1);
t.Wait();
"Done".Dump();
}
public static void Bar()
{
}
}
我希望这项任务能够立即运行并完成。有没有想过为什么?这似乎不会发生在实例构造函数中。v4.42.01如果将代码放入主或条方法,则代码的“开始新的-和-等待”部分将按预期工作(t.Result
将为1
)。只有将其放入静态构造函数时,它才会停止等待,因为“”
为了防止多次并发执行静态构造函数,CLR会在锁下执行它们。在这里,您尝试从Foo的静态构造函数调用Foo的匿名方法,并等待它完成,这会导致死锁
相关SO页面:,如果将代码放入主或条方法中,“开始新的和-等待”部分代码按预期工作(t.Result
将是1
)。只有将其放入静态构造函数时,它才会停止等待,因为“”
为了防止多次并发执行静态构造函数,CLR会在锁下执行它们。在这里,您尝试从Foo的静态构造函数调用Foo的匿名方法,并等待它完成,这会导致死锁
相关SO页面: