Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是并行的。Invoke()始终使用它';什么叫线程?_C#_Parallel Processing_Parallel.invoke - Fatal编程技术网

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
无论如何都会在执行时阻止调用者
线程
,直到所有被激发的委托完成。是故意的。因此,为了优化执行,它对第一个调用的委托使用主
线程
。但是是的,这取决于
任务调度器