我正在嘗試創建一個應用程序,它使用單點登錄與實時連接並基於他的實時連接信息自動註冊用戶。如何等待異步方法返回?
權當我的應用程序啓動時我把我的LiveConnectViewModel並調用這兩個函數:
public async void AuthInitialize()
{
string[] scopes = new[] { "wl.signin", "wl.basic", "wl.photos", "wl.emails", "wl.skydrive" };
liveAuthClient = new LiveAuthClient();
LiveLoginResult liveLoginResult = await liveAuthClient.InitializeAsync(scopes);
if (liveLoginResult.Status == LiveConnectSessionStatus.Connected)
{
App.Session = liveLoginResult.Session;
}
else
{
liveLoginResult = await liveAuthClient.LoginAsync(scopes);
App.Session = liveLoginResult.Session;
}
await LoadProfileAsync();
}
public async Task LoadProfileAsync()
{
LiveConnectClient client = new LiveConnectClient(App.Session);
LiveOperationResult liveOperationResult = await client.GetAsync("me");
LiveOperationResult liveOperationResultPicture = await client.GetAsync("me/picture");
dynamic dynResult = liveOperationResult.Result;
dynResult.picture = liveOperationResultPicture.Result;
User currentUser = await UserViewModel.findOrCreateUserAsync(dynResult);
App.currentUser = currentUser;
}
後,權當啓動畫面消失了,我查看出現另一個方法被調用。
此執行該代碼:
public ProfilePageViewModel()
{
this.CurrentUser = App.currentUser;
}
現在我的整體問題是在這裏的時間。當我調試我的應用程序時,我可以看到我的LiveConnectViewModel被首先調用並進行初始連接,然後LoadProfileAsync被執行,直到我的程序到達第一個await語句。
立即到達這一點時,我的應用程序停止對這個通話的工作,並繼續。現在,當涉及到我的ProfilePageViewModel,它應該設置我的「CurrentUser」屬性await仍然沒有返回我的用戶到我的App.CurrentUser屬性,這就是爲什麼它說它爲空。
通常我會等待,直到App.CurrentUser屬性被設置爲不是null的東西,但我無法擺脫奇怪的感覺,我錯過了實現MVVM模式的權利,或者我做了一件非常棒的事情等待和異步錯誤...
任何人都可以幫我澄清這種行爲?
從調用LoadProfileAsync()的前面除去'await'; '等待'已經在LoadProfileAsync()內完成了。 –
或反之亦然,如果這適合您的企業需要更合適。沒有必要等待兩次,廣告這樣做只會混淆事項。 –