如果我有以下程序
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