デリゲートの実行中にコンテキストスイッチが実行中のスレッドを切り替えることは可能ですか?
このスニペットを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();
}
}