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页面: