1

如果我有以下程序

public class MainClass {
    public static void Main () {
        Console.WriteLine($"Main [{Thread.CurrentThread.ManagedThreadId}]");
        
        Parallel.Invoke(
            () => Foo(),
            () => Bar()            
        );
        
        Console.WriteLine("Done");
    }

    static void Foo() {
        Console.WriteLine($"Foo[{Thread.CurrentThread.ManagedThreadId}]");
    }

    static void Bar() {
        Console.WriteLine($"Bar[{Thread.CurrentThread.ManagedThreadId}]");
    }
}

然后在.net core 3.1下它会产生类似的输出

Main [1]
Foo[1]
Bar[4]
Done

我现在的问题是它保证Parallel.Invoke()会使用它的调用线程来完成它给出的部分或全部工作吗?就像这会在每个平台或框架上出现,还是在 WPF 或 WinForms 等一些 UI 框架上表现不同。

我的问题也不是它是否会阻塞调用线程,而是调用线程是否会做一些工作。

例如,上述代码的输出可以是

Main [1]
Foo[2]
Bar[3]
Done
4

0 回答 0