0
我有一個關於invokeAsync和羯羊的CAL命令可被視爲可靠的ornot問題。InvokeAsync爲了可靠性
例子:
//Get Dispatcher of UI Thread
private Dispatcher _dsp = Dispatcher.CurrentDispatcher;
//Method called from non-UI Thread
private void a() {
//Do Stuff
b();
_dsp.InvokeAsync(() => {
//Do Stuff in UI Thread
});
}
private void b() {
//Do stuff
_dsp.InvokeAsync(() => {
//Do stuff in UI Thread
});
}
我可以理所當然地認爲,在b的InvokeAsync的代碼將在」 InvokeAsync代碼之前,因爲它放在UI線程的調度先跑到或者這是一個情況下最的時間b會先跑,但是在奇怪的賽道上,它可能是相反的,或者更糟的是,在兩者之間跳躍?
基本上,我可以有這個2調用麻煩在某些時候,或者這是正常的NAD將可靠地追隨我所提到的執行順序?如果有問題的機會,關於如何使它變好的任何想法?
不知道你的文件路徑是什麼有,但會看任務 - 那種是一樣的複製從調用代碼中在B中調用的到底有沒有? – 537mfb
它只是向您顯示您可以在這些方法中使用局部變量,但我可能應該提到這一點。不,不是......第一部分將異步運行,使用'TaskScheduler.FromCurrentSynchronizationContext()'選項將使第二部分在UI線程上運行。即使你關閉了這個選項,它仍然不一樣,因爲它們會運行在不同的異步環境中,但第二部分只是等待第一個完成。 – Sheridan
我最終做了一些重構,但沒有解決這個問題,但這是我在重構之前尋找的答案 - 謝謝 – 537mfb