C# 是并行的。Invoke()始终使用它';什么叫线程?
如果我有以下程序C# 是并行的。Invoke()始终使用它';什么叫线程?,c#,parallel-processing,parallel.invoke,C#,Parallel Processing,Parallel.invoke,如果我有以下程序 public类MainClass{ 公共静态void Main(){ WriteLine($“Main[{Thread.CurrentThread.ManagedThreadId}]”); 并行调用( ()=>Foo(), ()=>Bar() ); 控制台。写入线(“完成”); } 静态void Foo(){ WriteLine($“Foo[{Thread.CurrentThread.ManagedThreadId}]”); } 静态空心条(){ WriteLine($“Bar
public类MainClass{
公共静态void Main(){
WriteLine($“Main[{Thread.CurrentThread.ManagedThreadId}]”);
并行调用(
()=>Foo(),
()=>Bar()
);
控制台。写入线(“完成”);
}
静态void Foo(){
WriteLine($“Foo[{Thread.CurrentThread.ManagedThreadId}]”);
}
静态空心条(){
WriteLine($“Bar[{Thread.CurrentThread.ManagedThreadId}]”);
}
}
那么,在.NETCore3.1下,它会产生如下输出:
Main [1]
Foo[1]
Bar[4]
Done
我现在的问题是,是否保证Parallel.Invoke()
将使用它的调用线程来完成它所做的部分或全部工作?每个平台或框架上都会出现这种情况,或者在某些UI框架(如WPF或WinForms)上的表现会有所不同
我的问题也不是它是否会阻止调用线程,而是调用线程是否会做一些工作
例如,上述代码的输出可以是
Main [1]
Foo[2]
Bar[3]
Done
如果答案是否定的,你会有什么不同?我想我们需要一个新的接近的理由“不清楚你为什么要问”。你可以研究自我回答这样的问题,但真的-你打算用这样的知识做什么?感觉就像。这取决于TaskScheduler。
Parallel.Invoke
无论如何都会在执行时阻止调用者线程
,直到所有被激发的委托完成。是故意的。因此,为了优化执行,它对第一个调用的委托使用主线程。但是是的,这取决于任务调度程序。如果答案是否定的,你会有什么不同?我想我们需要一个新的接近的理由“不清楚你为什么要问”。你可以研究自我回答这样的问题,但真的-你打算用这样的知识做什么?感觉就像。这取决于TaskScheduler。Parallel.Invoke
无论如何都会在执行时阻止调用者线程
,直到所有被激发的委托完成。是故意的。因此,为了优化执行,它对第一个调用的委托使用主线程。但是是的,这取决于任务调度器。