C# の async await 機能で遊んでいます。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
完了するまで待機しません。代わりにBgOnRunWorkerCompleted
、呼び出し後に即座に実行しMethod
ます。どうしてこんなことに?ここで何が欠けていますか?
PS: これを行う別の方法や正しい方法には興味がありません。この場合、舞台裏で実際に何が起こっているのか知りたいですか? なぜ待っていないのですか?