執行代理切換執行線程時是否可以執行上下文切換?在委託執行過程中,P-Linq可以切換線程嗎?
我在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();
}
}
很棒,你會碰巧有一個MSDN鏈接瞭解更多信息?我無法找到任何東西。 – asawyer 2012-04-11 19:18:50
@asawyer我不知道MSDN或語言規範中記錄了哪些內容(儘管我相信您會在某處找到它)。我只能給你其他Q/A論壇或博客的報價。 – Servy 2012-04-11 19:32:26