質問:
ForEach のコンテキスト内で非同期機能を採用することは可能ですか?試行された実装を示すコード スニペットを以下に示します。
using (DataContext db = new DataLayer.DataContext()) { db.Groups.ToList().ForEach(i => async { await GetAdminsFromGroup(i.Gid); }); }
ただし、実行時に次のエラーが発生します。
The name 'Async' does not exist in the current context
using ステートメントをカプセル化するメソッドが指定されていることに注意してください。
答え:
List
この特定のシナリオでは、別のアプローチを追求することをお勧めします。これには、各要素を非同期操作に投影することが含まれます。その後、これらの操作の完了を非同期で待つことができます。
using (DataContext db = new DataLayer.DataContext()) { var tasks = db.Groups.ToList().Select(i => GetAdminsFromGroupAsync(i.Gid)); var results = await Task.WhenAll(tasks); }
このアプローチには、ForEach で非同期デリゲートを使用する場合に比べて、いくつかの利点があります。
以上が非同期操作は ForEach で使用できますか? 最良の代替手段は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。