簡體   English   中英

使用async-await等待另一個視圖加載

[英]Using async-await to wait for another view to load

我正在編寫一個Windows Phone 8應用程序,該應用程序使用REST API收集數據。 該API需要身份驗證,因此每當我嘗試調用REST API時,都必須檢查用戶是否已通過身份驗證。 如果用戶未通過身份驗證,那么我想調出登錄視圖並讓用戶進行身份驗證。 它不是HTTP身份驗證,但使用了自定義登錄屏幕。

我的問題是:我想使用await等待身份驗證發生,但是我不知道該怎么做,因為我不得不提出另一種觀點。 這是我想做的偽代碼:

LoadData方法:

async Task LoadDataAsync() {
    bool authenticated = await AuthenticateAsync();
    if (authenticated) {
        // do REST API stuff
    }
}

和AuthenticateAsync方法:

async Task<bool> AuthenticateAsync() {
    if (alreadyAuthenticated)
        return true;
    // not authenticated, so bring up a login view to let the user log in
    // How do I do this in the context of async-await?
}

因此,在AuthenticateAsync方法中,如果用戶需要進行身份驗證,我想顯示一個登錄視圖。 但是我不能調用NavigationService.Navigate()因為它不是異步等待友好的,而且我也無法等待任何東西。

什么是正確的方法?

我找到了答案。 我最終在這里使用答案: https : //stackoverflow.com/a/12858633/225560

具體來說,我使用了TaskCompletionSource<bool>對象,然后可以等待它。 然后,我導航到登錄視圖,登錄成功后會回叫我。 然后,我設置TaskCompletionSource的結果,這釋放了我的等待,並使該方法繼續。 最終,它的工作幾乎就像在Objective-C中的委托一樣,因為登錄完成后,登錄視圖在初始類上調用了一個方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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