[英]How to wait async call completed?
假設我有兩個事件A和B。它們各自引發一個異步調用,例如AsyncA和AsyncB。
我想要的是:僅當AsyncB完成時,A才會調用AsyncA。
事件A和B依次觸發:A,然后B。我希望AsyncA在AsyncB完成之前完成,但是實際上,大多數情況下,AsyncB在AsyncA之前完成。
我無法將AsyncB呼叫置於AsyncA完成事件中。 如何確保AsyncB始終在AsyncA之后?
如果順序比異步方法重要,則不合適。
由於兩個調用都是異步運行的,因此無法控制它們的順序。 這是由調度程序完成的。
但是您可以使用TPL使它們兩者同步運行:
System.Threading.Tasks.Task.Factory.StartNew( ( ) => OnAsyncA() )
.ContinueWith( ( t ) => OnAsyncB() );
您不能保證異步調用的完成順序,但是可以按想要的順序執行要完成的工作 。 您需要的是一種同步方式。
在OnAsyncA
您需要:
OnAsyncB
所需的信息。 在OnAsyncB
,
在線程池線程中,
OnAsyncB
完成的OnAsyncB
。 這方面還有其他變體,例如,使用TPL等使較長的運行線程從“相關事件”隊列中出隊。
請記住要從線程池線程同步回UI線程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.