簡體   English   中英

InvokeAsync訂單可靠性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM