私たちは、バックグラウンドでタスクのリストを実行するwebservice関数を持っています。すべてのタスクが完了すると、それが戻ります。やるべきこと、個々のタスクのasync/awaitを使用したマルチスレッド待機の書き換え
var result = new List<int>();
var tasks = new List<Task<int>>();
foreach (var row in rowlist)
tasks.Add(Task.Factory.StartNew(() => DoWork(row)));
foreach (var task in tasks)
result.Add(task.Result);
task.Result
待ち:私は、私は次のコードの作業を取得するために管理してきたC#5のための機能を再訪しました。私はこれを、DoWork
メソッドに3秒の遅延を加え、10秒のタスクのリストのために5秒未満で終了したことを確認することでこれをテストしました。
これで、新しいasync/await
構文を使用して関数を書き直そうとしました。しかし、私はそれを動作させるように見えることはできません。コンパイルすると、待機を追加して検証されるので、同期して実行されます。
async/await
を使用して上記のスニペットを書き換える方法に関するアイデアはありますか?
これは非同期で実行されます。しかし、結果は 'System.AggregateException'となり、内部例外は' {"クエリの結果を複数回列挙することはできません" – Andomar
もっと重要なのは、 'await'で行を省略すると、なぜこれが同期して実行されるのでしょうか? – Andomar
@Andomarタスクを作成するときに 'Select'の後に' ToList'を呼び出します。それはエラーを修正するはずです。現在、 'tasks'を数回列挙すると、新しいタスクを2回作成しようとしますが、これは悪いことです。 – Servy