3
私はこのコードを実行すると、何もブロックがすべての罰金とダンディ、存在しない:C#なぜタスクはいつUIスレッドをブロックしますか?すべての行を待っているのではないでしょうか?
List<Category> cats = null;
cats = await cat.GetAllAsync();//no blocks here
cats = await cat.GetAllAsync();//no blocks here
cats = await cat.GetAllAsync();//no blocks here
cats = await cat.GetAllAsync();//no blocks here
cats = await cat.GetAllAsync();//no blocks here
しかし、この他のコードがないと私は、なぜ得ることはありません、私はあなたの助けに感謝し、
var tasks = new List<Task>();
tasks.Add(cat.GetAllAsync());
tasks.Add(cat.GetAllAsync());
tasks.Add(cat.GetAllAsync());
tasks.Add(cat.GetAllAsync());
tasks.Add(cat.GetAllAsync());
await Task.WhenAll(tasks); //this blocks the UI thread
EDIT: GetAllAsyncが非同期にsprocを実行することがわかりましたが、返されるDataSetからカテゴリのリストが作成されますが、そこには非同期は存在しませんので、メインスレッドはそれを選択して10万のカテゴリをバインドします。 UIをブロックする!ドゥー!助けのための
おかげで、
[MCVE]ガイダンスを参照してください... (あなたが 'GetAllAsync'を複数回呼び出すことが安全であると仮定して、つまり' {Task.Yield(); return new List();} 'のようなメソッド) –