現在 Oracle と連携していますが、MS SQL のソリューションも必要になります。
ユーザーがデータベースで実行される SQL を生成できるようにする GUI があります。生成される検索によっては、これには非常に長い時間がかかる場合があります。この検索中に GUI/アプリを応答させ、ユーザーが検索をキャンセルできるようにしたい。
バックグラウンド ワーカー スレッドを使用しています。
私の問題は、ユーザーが検索をキャンセルしたときに、データベースへの呼び出しを中断できないことです。完了するまで待機してから、「CancelationPending」プロパティをポーリングできます。これはデータベースのリソースを浪費するだけでなく、コードに問題を引き起こします。
ユーザーが非常に長いクエリで [検索] をクリックし、[キャンセル] をクリックしてからもう一度 [検索] をクリックした場合、最初の検索はまだデータベースで処理されています。バックグラウンド ワーカーは、検索を再度実行してもまだビジー状態です。この問題に対する唯一の解決策は、新しいバックグラウンド ワーカーを作成することです。
それは物事を行うための本当に醜い方法のようです。データベースは動作し続けます バックグラウンドワーカーの新しいインスタンスを作成しています....データベース呼び出しを本当に停止して同じワーカーを再利用したいとき。
どうやってやるの?