我在玩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)很有帮助。 –