[英]InvokeAsync order reliability
我有一個關於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中的代碼先在UI線程的分派器中運行是因為b的InvokeAsync是在UI線程的調度程序中首先運行,或者這是大多數情況下b的第一個都將首先運行但在奇怪的情況下運行的情況嗎?可能是相反的,或者甚至更糟的是在兩者之間跳?
基本上,我可以在某個時候遇到這2次調用嗎?還是可以,但是可以肯定地遵循我提到的執行順序嗎? 如果有問題的機會,如何使它變得更好有什么想法?
我不認為您可以對任何異步操作的運行順序做出任何假設。 但是,如果需要它們按順序運行,則可以使用Task
類執行以下操作:
Task.Factory.StartNew(() => DoSomethingWith(filePath)).ContinueWith((
Task resultFromPrevious) => DoSomethingElseWith(resultFromPrevious),
TaskScheduler.FromCurrentSynchronizationContext())
在這種情況下, TaskScheduler.FromCurrentSynchronizationContext()
選項將使DoSomethingElseWith
方法在UI線程上運行。
您可能需要查看MSDN上的Task.ContinueWith方法頁面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.