我在玩C#的異步等待功能。當我在UI線程中使用它時,事情會按預期工作。但是,當我在非UI線程中使用它時,它無法按預期工作。考慮下面爲什麼在後臺線程不會等待任務完成?
private void Click_Button(object sender, RoutedEventArgs e)
{
var bg = new BackgroundWorker();
bg.DoWork += BgDoWork;
bg.RunWorkerCompleted += BgOnRunWorkerCompleted;
bg.RunWorkerAsync();
}
private void BgOnRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs runWorkerCompletedEventArgs)
{
}
private async void BgDoWork(object sender, DoWorkEventArgs doWorkEventArgs)
{
await Method();
}
private static async Task Method()
{
for (int i = int.MinValue; i < int.MaxValue; i++)
{
var http = new HttpClient();
var tsk = await http.GetAsync("http://www.ebay.com");
}
}
代碼當我執行該代碼,後臺線程不等待長時間運行的任務Method
完成。在撥打Method
後立即執行BgOnRunWorkerCompleted
。爲什麼?我在這裏錯過了什麼?
P.S:我對這樣做的替代方式或正確方法不感興趣。我想知道這種情況下幕後發生的事情是什麼?爲什麼不等待?
你會發現我的[異步/的await簡介](http://nitoprograms.blogspot.com/2012/02/async-and-await.html)很有幫助。 –