5

何らかの方法でこのタスクを削除しましたか、それとも自己破壊されましたか?

Task.Factory.StartNew(() => { DoSomeJob(); }, TaskCreationOptions.LongRunning);

またはそれを次のように使用する方が良いです

var t = Task.Factory.StartNew(() => { DoSomeJob(); }, TaskCreationOptions.LongRunning);

そしてどういうわけか後でtを削除/無効化しますか?

ありがとうございました!

4

4 に答える 4

6

削除する必要はありません。最終的には破棄されます....

于 2012-10-12T13:40:47.767 に答える
3

つまり、キャンセルするか、中止するか、または他の方法で終了する前に実行を停止できます。いいえ、そうではありません(現在のように)。キャンセル トークン ソースを作成し、そのトークンをタスクに渡す必要があります。その後、タスクで実行されているメソッドは、キャンセルされていないことを定期的に確認する必要があります。

できることは、しばらく待って、その待機操作をキャンセルすることです。これにより、実行する必要がある「次の」タスクを引き続き実行できます。これを行った場合、タスク自体のメソッドが削除をチェックする上記の作業を追加せずに、メソッドは完了まで実行され、以前に待機を停止することに注意してください。

関連リンク

タスクの実行が完了したら、タスクが使用するリソースをクリーンアップすることだけが心配である場合は、心配する必要はありません。すべて自動的に処理されます。

関連リンク

于 2012-10-12T13:43:03.773 に答える
2

自分で処分しようとする場合は注意が必要です。まだ実行中の状態の場合、次の例外が発生します。

A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled)

したがって、最初の例を使用することをお勧めします。

于 2012-10-12T13:43:15.093 に答える
1

ガベージ コレクションがクリーンアップを処理します。参照を保持する必要はありませんt

于 2012-10-12T13:41:15.037 に答える