条件付きの継続を使用して小さな一連のタスクを作成しましたが、奇妙な動作が発生しています。私のチェーンは次のようになります。
LoadSettings (OnlyOnFaulted)-> ErrorHandler (none)-> Cleanup (none)-> Exit
| (OnlyOnRanToCompletion)
CheckForUpdates (OnlyOnFaulted)-> ErrorHandler (none)-> Cleanup (none)-> Exit
| (OnlyOnRanToCompletion)
Update (OnlyOnFaulted)-> ErrorHandler (none)-> Cleanup (none)-> Exit
| (OnlyOnRanToCompletion)
Cleanup (OnlyOnFaulted)-> ErrorHandler (none)-> Exit
| (OnlyOnRanToCompletion)
Exit
私が理解したように、このチェーンは非同期で (つまり、UI スレッドではなく) 実行する必要がありますが、次々と (LoadSettings -> CheckForUpdates -> ...) 実行する必要があります。
ただし、次のように動作します:
LoadSettings -> CheckForUpdates -> Cleanup -> Exit -> Cleanup -> ... また、最初の Cleanup は Task id 1 をパラメーターとして呼び出されます (これは直前に実行されたタスクですよね?)そして、このタスクのステータスはキャンセルされました(そして、タスクをどこでもキャンセルすることはありません)。
ここで何がうまくいかないのか誰にもわかりませんか?
編集: OK、msdn によると、継続の条件が満たされない場合、そのタスクはキャンセルされます。したがって、ErrorHandler はキャンセルされますが、完全なチェーンを停止するにはどうすればよいですか (または、キャンセルされたことをクリーンアップと終了で他の継続に通知します)。