質問: アドバイスを伺います。外部ライブラリを必要とするコンソールアプリケーション(サーバー)を開発しています。 Entity Framework Coreを使用しています。しかし、私はまだ非同期/待機の概念に関してギャップがあります。私はそれにかなりの数のことを読んだり、かなりの数のことを試しました。 データベースとECS(Entity Component System)アーキテクチャに関するEntity / DAL / BLLアーキテクチャをセットアップしました。 イベントを呼び出すシステムがあります(OnInitialized)。この場合、(システムによっては)データベースから異なるデータをロードする必要があります。 同じDbContextで複数の並列クエリを同時に実行することはできません。複数のテーブルを持つデータベースが1つだけあります。 それで、データベースとの相互作用を完全に同期して開発する必要がありますか? または、複数の非同期を同時に使用するパターンはありますか?
回答: 非同期/待機パターンは、並列処理に間接的にのみ関連しています。 最初に、タスクが戻るのを「待つ」とき、何が起こっているのかを正確に理解する必要があると思います。 awaitキーワードは、私の意見では少し誤解を招くものです。関数が戻るのを実際に待つのではなく、別のスレッドで呼び出した関数を開始し、現在のスレッドの状態を状態エンジンに保存し、プログラム実行パスが呼び出し元に制御を返します。呼び出された関数が終了すると、その状態エンジンはスレッド状態を再構築して実行を継続します。 タスクの並列化は実際にはかなり簡単です。関数が戻るのを待つ代わりに、関数が返すタスクオブジェクトを取得し、それらをコレクションに収集してTask.WaitAll(collection)を呼び出します。その後、すべてのタスクオブジェクトは、その結果を含む結果プロパティを持ちます。