委托执行期间的上下文切换是否可以切换执行线程?
我在 LinqPad 中尝试了这个片段几次,但它没有上new Exception()
线,这似乎表明它将在原始线程上继续,但也许我这里的小测试不足以测试这个,我只是不确定。
void Main()
{
var list = Enumerable.Range(1,100000);
list.AsParallel().ForAll( i=>
{
var threadId = System.Threading.Thread.CurrentThread.ManagedThreadId;
System.Threading.Thread.Sleep(0); // allow a context switch
work(i,threadId);
});
"Complete".Dump();
}
void work(int num,int threadId)
{
var currentId = System.Threading.Thread.CurrentThread.ManagedThreadId;
if(threadId!=currentId)
{
throw new Exception();
}
}