初めて C# のタスク機能を調べています。私がそれを見ている理由は、アプリケーションが実行する必要のある一連のことを制御する必要があり、それらの「タスク」を厳密に制御する必要があるからです。正確には、特定のタスクがいつ終了したかを知る必要があり、必要に応じて残りのタスクの実行をキャンセルする機能も必要です。
これまで読んだことから、同期コードを使用すればそれを実現できます。たとえば、私は持っています:
Task task = new Task(() =>
{
synchronousMethod();
});
task.Start();
これは期待どおりに機能するので、コードが同期的に実行されているため、このタスクがいつ終了するかがわかります。したがって、タスクが開始され、実行が synchronousMethod コンテンツに入り、最後まで実行され、Task コードに戻り、Complete とマークされます。このメソッドが非同期メソッドに変更されると、問題が発生します。そのメソッドは別のスレッドで実行されているため、タスクが完了としてマークされていても、非同期メソッドはまだ完了していない可能性があります。
さらに悪いことに、その非同期メソッドが、単一タスクの一部として含めたい非同期呼び出しを持つ他のメソッドを内部で実行する場合です。
私の質問は、タスク名前空間内で必要なレベルの制御を達成できるかどうかです。もちろん、特定の時点で呼び出される特定のコールバックを入力してみてください。これは、タスクが特定の時点に達したことを通知しますが、それらのタスクがかなりの数にあり、どのタスクがどれではないかを知る必要がある場合私が興味を持っているのと同じくらいエレガントなソリューションです。
ヘルプ/アドバイスはありますか?