非同期メソッドを使用して複数のソースからデータをロードするコードがあります (以下を参照)。
public class ThEnvironment
{
public async Task LoadLookupsAsync(CancellationToken cancellationToken) { ... }
public async Task LoadFoldersAsync(CancellationToken cancellationToken) { ... }
}
プログラムの他の場所で、複数の環境をロードしたいと考えています。
ThEnvironment[] workingEnvironments = ThEnvironment.Manager.GetWorkingEnvironments();
foreach ( ThEnvironment environment in workingEnvironments )
{
await environment.LoadLookupsAsync(CancellationToken.None);
await environment.LoadFoldersAsync(CancellationToken.None);
}
私の質問は 2 つあります。
- 単一の環境で、両方の environment.Load...Async() メソッドを並行して実行し、CancellationToken を渡すにはどうすればよいですか?
- すべての環境でこれを並行して行うにはどうすればよいですか?
結論: すべての環境ですべての Load..Async() メソッドを並行して実行し、それでも CancellationToken を渡すことができるようにしたいと考えています。
アップデート
非常に迅速な回答をありがとうございました。コードを次のように減らしました。
Refresh();
var tasks = ThEnvironment.Manager.GetWorkingEnvironments()
.SelectMany(e => new Task[] { e.LoadLookupsAsync(CancellationToken.None), e.LoadFoldersAsync(CancellationToken.None) });
await Task.WhenAll(tasks.ToArray());
これは本番アプリケーションではないため、すべての例外をキャプチャすることについてあまり心配していません。上部の Refresh() は、フォームの最初の描画の問題を処理しました。
素晴らしいもの。