Windowsフォームのイベントハンドラ上でEntityFramework6のToListAsync()がawaitできない
Windowsフォームのイベントハンドラにて、EntityFramework6でDBクエリを実行しています。
ToListAsync()にawaitキーワードをつけて非同期実行とし、CancellationTokenを渡して処理のキャンセルを可能としています。
しかしながら、下記コードで実行してみると、クエリの完了までUI操作がブロックされます。
意図した動作にならない原因は何なのでしょうか。
private async void button1_Click(object sender, EventArgs e)
{
_cts = new CancellationTokenSource();
using (var db = new SampleEntities())
{
// ここでawaitするがUIに制御が渡らない
_result = await db.Database.SqlQuery<Result>("select fullname,productname from customers, products").ToListAsync(_cts.Token);
}
dataGridView1.DataSource = _result;
statusLabel.Text = $"{_result.Count} records loaded.";
}