2

起動時に 2 つのデータ調査バックグラウンド タスクをスピンオフできる WPF アプリケーションがあります。これらのバックグラウンド タスクは、ファイルを開き、解析し、閉じてから、SqlServer データベースのデータを更新します。これらのタスクはいずれも、ディスプレイ スレッドに何かを返す必要はありません。これらのバックグラウンド タスクは完了するまで実行する必要はありませんが、ファイルを開いたままにしたり、Sql Server を予期しない状態にしたりしないようにする必要があります。ユーザーは、タスクの開始後いつでもアプリケーションを閉じることができます。System.Threading.Tasks 名前空間のリソースを使用しています。一例:

var IncorporateTask = Task.Factory.StartNew(CommentIncorporateTask);
var incorporateTaskDone = IncorporateTask.ContinueWith((antecedent) => IncorporateTaskFinalize(), TaskScheduler.FromCurrentSynchronizationContext());

ユーザーがアプリケーションを閉じる操作を遅らせることなく、これらのスレッドが完全に閉じられるようにするための措置を講じる必要がありますか?

4

1 に答える 1

2

スレッドが正常に終了することを心配する必要はありません。バックグラウンド作業のトランザクション境界を定義し、プロセスがそれらの境界内で終了しないようにすることについて心配する必要があります

CancellationToken をバックグラウンド タスクに渡すことをお勧めします。ユーザーがプロセスの終了を要求した場合は、次のことを行う必要があります。

  1. トークン ソースをキャンセルします。
  2. バックグラウンド タスクを待機します。非同期継続を使用して、より手の込んだことを行うことができます (たとえば、すべての UI を無効にして、バックグラウンド タスクが終了するまでアニメーションを表示します)。

バックグラウンド タスクは、関連する場合はいつでもキャンセル トークンをチェックし、トークンがキャンセルされた場合は早期に終了し、そうすることで悪い状態にならないようにする必要があります。これにより、基本的にバックグラウンド タスクがいつ終了できるかを担当しますが、UI はできるだけ早く終了を要求できます。

于 2012-12-22T13:55:38.810 に答える