コマンドの実行など、データベースでの一部の操作は、完了までに長時間かかることがあります。 このような場合、シングルスレッド アプリケーションでは、他の操作をブロックしなければならず、そのコマンドの完了を待ってから独自の操作を続行する必要があります。 これに対して、長時間にわたる操作をバックグラウンド スレッドに割り当てることができれば、フォアグラウンド スレッドがアクティブなまま操作を続行できます。 たとえば、Windows アプリケーションでは、操作を実行中のユーザー インターフェイス スレッドの応答性を維持しながら、時間のかかる操作をバックグラウンド スレッドに委任することができます。
.NET Framework には、開発者がバックグラウンド スレッドを利用し、ユーザー インターフェイスまたは優先度の高いスレッドを解放して他の操作を完了するために使用できる、いくつかの標準的な非同期設計パターンが用意されています。 ADO.NET では、 SqlCommand クラスでこれらの同じデザイン パターンがサポートされています。 特に、BeginExecuteNonQuery、BeginExecuteReader、および BeginExecuteXmlReader メソッドと、EndExecuteNonQuery、EndExecuteReader、および EndExecuteXmlReader メソッドとのペアによって、非同期動作がサポートされています。
注
非同期プログラミングは .NET Framework のコア機能であり、ADO.NET は標準の設計パターンを最大限に活用します。 開発者が使用できるさまざまな非同期技法の詳細については、「同期メソッドの非同期呼び出し」を参照してください。
ADO.NET 機能で非同期手法を使用しても特別な考慮事項はありませんが、.NET Framework の他の領域よりも多くの開発者が ADO.NET で非同期機能を使用する可能性があります。 マルチスレッド アプリケーションを作成する利点と落とし穴に注意することが重要です。 このセクションに示す例は、マルチスレッド機能を組み込むアプリケーションを構築する際に考慮すべき重要な問題を提示しています。
このセクションにて
コールバックを使用する Windows アプリケーション
この例では、非同期コマンドを安全に実行し、異なるスレッドのフォームと内容との対話を正しく処理する方法を示します。
ASP.NET アプリケーションの待機ハンドルの使用
この例では、ASP.NET ページから複数の同時実行コマンドを実行し、すべてのコマンドの終了時に Wait ハンドルを使用して操作を管理する方法を示します。
コンソール アプリケーションでのポーリング
この例では、ポーリングを使用して非同期コマンドの実行をコンソール アプリケーションで待機する方法を示します。 この技法は、クラス ライブラリまたはユーザー インターフェイスを持たないその他のアプリケーションでも有効です。