最初に特定の長時間実行されるアクティビティを実行し、基本的にアプリケーションの存続期間中存続する tpl タスクをスピンする .Net (v4.0) Windows サービス アプリケーションがあり、TaskCreationOptions で作成されます。LongRunningパラメータ値。
サービスが停止し、.OnStop() メソッドが呼び出されるたびに、.Cancel()作成時にワーカー タスクに渡した CancellationToken(Source) を.OnlyOnCanceled(...)継続タスクにしたい走る。
問題は、その継続タスクが「完全に」実行されずにサービス/プロセスがシャットダウンすることです。かなり早く終了する場合もあれば、完全に終了する場合もあれば、終了しない場合もあります。
その特定のタスクはおそらくメインのスレッドとは別のスレッドにあるため、そのメインのタスクを「停止」/ブロックして終了させる方法がないため、これは私には理にかなっています。
そのWindowsサービスアプリケーションにSynchronizationContextがないので、その継続タスクをそこで/メインスレッドで実行するように指示できないので、どうすればよいのでしょうか?
より正確には、実行中の tpl タスクでアプリケーションのシャットダウンを処理するためのベスト プラクティスは何ですか?