是Parallel.Invoke始终使用它的调用线程吗?

问题描述

如果我有以下程序

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()将使用它的调用线程来完成它给出的部分或全部工作吗?就像在每个平台或框架上一样,还是在某些UI框架(如WPF或WinForms)上表现有所不同。

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

例如上述代码输出可以是

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)