視覺工作室給我關於不等待我的MessageDialog.ShowAsync()
和Launcher.LaunchUriAsync()
方法的各種警告。我應該等待像MessageDialog和Launcher方法的異步調用嗎?
它說:
「考慮應用的await關鍵字」
很顯然,我並不需要等待他們,但就是這將是有益的?
等待調用顯然會阻塞UI線程,這很糟糕 - 那麼爲什麼Visual Studio會拋出如此多的警告?
視覺工作室給我關於不等待我的MessageDialog.ShowAsync()
和Launcher.LaunchUriAsync()
方法的各種警告。我應該等待像MessageDialog和Launcher方法的異步調用嗎?
它說:
「考慮應用的await關鍵字」
很顯然,我並不需要等待他們,但就是這將是有益的?
等待調用顯然會阻塞UI線程,這很糟糕 - 那麼爲什麼Visual Studio會拋出如此多的警告?
等待顯然是調用阻塞UI線程這是壞
await
實際上並沒有阻止用戶界面。 await
暫停執行該方法,直到等待完成的任務完成,然後繼續該方法的其餘部分。閱讀更多關於await (C# Reference)。
很明顯,我不需要等待他們,但它會是有益的嗎?
如果你不使用await
,然後完成MessageDialog.ShowAsync()
之前可以完成呼叫MessageDialog.ShowAsync()
的方法。你不需要,但這是個好習慣。
例如,假設您想要下載一個字符串,並使用它,沒有的await:
async void MyAsyncMethod()
{
var client = new HttpClient();
var task = client.GetStringAsync("http://someurl.com/someAction");
// Here, GetStringAsync() may not be finished when getting the result
// and it will block the UI thread until GetStringAsync() is completed.
string result = task.Result;
textBox1.Text = result;
}
但是如果我們用await
:
async void MyAsyncMethod()
{
var client = new HttpClient();
string result = await client.GetStringAsync("http://someurl.com/someAction");
// This method will be suspended at the await operator,
// awaiting GetStringAsync() to be completed,
// without freezing the UI, and then continues this method.
textBox1.Text = result;
}
該方法的第一個版本阻止調用/ UI線程,直到您訪問Result屬性時任務完成。 –
@JamesManning你是對的,我在想什麼。我更新了評論。下次我會做一個更好的例子=)感謝您指出。 –
是否http://msdn.microsoft。 com/en-us/library/hh965065.aspx有幫助嗎? –