我們正在觀察一些奇怪的事情,這樣的代碼:Task.ContinueWith(...,TaskScheduler.FromCurrentSynchronizationContext())將不會在UI線程上運行的任何場景?
var task = new Task(...); // run in the background, do something lengthy work
task.ContinueWith(..., TaskScheduler.FromCurrentSynchronizationContext());
task.Start();
第二項任務有要求的事件,這反過來又嘗試更新的圖形用戶界面,並且我們得到了可怕的跨線程異常。
檢查Thread.CurrentThread.ManagedThreadId
從第二個任務中的方法出現,表明它實際上是而不是在UI線程上運行。
產生任務的代碼是在UI線程上運行的。
有什麼情況會出現這種情況?
爲什麼直接創建任務而不是運行Task.StartNew? – 2013-03-20 13:22:57
@PanagiotisKanavos,可以有這樣做的(見http://blogs.msdn.com/b/pfxteam/archive/2010/06/13/10024153.aspx)正當理由,但這不是有密切關係的問題。 – 2013-03-20 13:36:28
嗯,我不能瑞普這一點,我也沒有遇到過這種情況,或上下文變得無效,除非創建任務的調用是不是真的在UI線程首先 – 2013-03-20 13:38:06