私は、Task Parallel Libraryを使用して実装した長年のタスクを持っています。タスクが開始されると、いくつかの入力値とコレクションのスナップショットを取得し、その情報を使用してさまざまな操作を実行します。タスクの実行中にこれらの値またはコレクションのいずれかが変更された場合、タスクが完了したら直ちに再度実行するようにしたいと思います。新しいタスクを作成するか、既存のタスクを再利用する方法はありますか? 2番目の反復を開始する最善の方法は何ですか?繰り返しタスクを再起動/再利用するにはどうすればよいですか?
13
A
答えて
11
新しいタスクを作成します。
http://msdn.microsoft.com/en-us/library/dd270682.aspxは、実行中のタスクまたは完了したタスクの再試行がサポートされていないことを示しています。通常は例外をスローする何かを行うことはめったにありません。また、タスクを再利用することもその1つです。
1
もう一度既存のTask
を開始することはできません。したがって、2つのオプションがあります。
Task
を新規作成してください。これはおそらくよりクリーンです。Task
のループを実行して、前回以降何かが変更されたかどうかを確認します。変更した場合は、新しい繰り返しを開始します。
+0
上記と同じ質問:2番目のタスクの必要性をどのように伝えますか? – SonOfPirate
+0
2番目のタスクが必要であるとどのように判断するのか分からずに伝えるのは難しいです。完了後も再起動したい場合は、イベントを使用することができます。 – svick
0
また、(VB.NETまたは代表者)関数ポインタを使用するようにプログラムロジックをリファクタリングできます。
関連する問題
- 1. デバイスを再起動せずにアプリシステムを再起動するにはどうすればよいですか?
- 2. C#モバイルアプリケーションを再起動するにはどうすればよいですか?
- 3. スプールプリンタを再起動するにはどうすればよいですか?
- 4. スクリプトを再起動するにはどうすればよいですか?
- 5. Viewオブジェクトを再利用するにはどうすればよいですか?
- 6. Denseレイヤーを再利用するにはどうすればよいですか?
- 7. 変数を再利用するにはどうすればよいですか?
- 8. ScriptContextを再利用するにはどうすればよいですか?
- 9. SQLの再帰CTE - 繰り返し結果を避けるにはどうすればよいですか?
- 10. Chromeブラウザを再起動するにはどうすればいいですか
- 11. slonyを再起動するにはどうすればいいですか?
- 12. docker-composeでhealthcheckを使用してコンテナを再起動するにはどうすればよいですか?
- 13. Visibleプロパティを使用してUWPでアニメーションを再起動するにはどうすればよいですか?
- 14. アクティビティが再び起動されないようにするにはどうすればよいですか?
- 15. 再起動時にglassfishを起動させるにはどうすればよいですか?
- 16. このコードを再利用できるようにするにはどうすればよいですか?
- 17. 入力を使用してバッチプログラムを再起動するにはどうすればよいですか?
- 18. コマンドプロンプトを使用してサービスを再起動するにはどうすればよいですか?
- 19. Python:値を取り込まずにメソッドを再起動するにはどうすればよいですか?
- 20. Javaでは、プリミティブ配列の場合、繰り返し再作成するよりもはるかに高速に配列を再利用していますか?
- 21. XPath 1.0を使用してSchematronでアサートテストを再利用するにはどうすればよいですか?
- 22. Python:CSVで繰り返し実行するFORループを再起動する方法
- 23. 繰り返しごとにSqlCommandパラメータを再利用する方法は?
- 24. gulpで別のタスクから繰り返しタスクを起動する方法4
- 25. Androidデータベースでアプリケーションを再起動するとデータが繰り返される
- 26. どうすればgit bashを再起動できますか?
- 27. 新しい環境でC#ファーストコード移行を再利用するにはどうすればよいですか?
- 28. Greasemonkeyスクリプトを再起動しないFirefoxアドオンに変換するにはどうすればよいですか?
- 29. Processingで再利用可能なオブジェクトを維持するにはどうすればよいでしょうか?
- 30. 同じコード行を繰り返さないようにJavaScript関数を再利用するには?
2番目のタスクの必要性をどのように伝えますか?元のタスクが実行されている間に、完了した後のいつかまで変更が発生する可能性があります。 – SonOfPirate
その基準に基づいて、現在の状態をポーリングする1つの非終了タスクでうまくいくと思います。状態が変わったら、あなたのことをしてください。ここでの基本的な要件は、これが非同期的に発生し、メインスレッドをブロックしないようにすることです。タスクに、アプリケーションが終了して終了することを示すフラグを設定する必要があります。 –
私は何も考えていない単一のタスクを終了します。私はCancellationTokenを使用して、アプリケーションが終了したときに処理することができますが、アルゴリズムを実行するためにTaskが必要であることを示すためにどのようなメカニズムを使用するべきかわかりません。 AutoResetEventを使用すると、タスクのスレッドがイベント待ちの状態で中断されるため、キャンセルできなくなります。一方、私はSpinWaitを使用することはCPUを大量に消費することを読んでいます。 – SonOfPirate