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