タスク並列ライブラリを使用したファイアアンドフォーゲットタスク: 破棄に関する懸念
タスク並列ライブラリを使用してファイアアンドフォーゲットタスクをトリガーする場合ライブラリ (TPL) では、開発者は一般に、Task オブジェクトの適切な処理について疑問に直面します。 MSDN ドキュメントでは、最後の参照を解放する前に Dispose() を呼び出す必要性が強調されていますが、そうしないことによる実際的な影響は不明瞭です。
Microsoft の Stephen Toub 氏によると、タスク破棄は主に、管理されていない可能性のあるリソースを処理するために存在します。タスクの完了を待つときに使用されます。ただし、継続のみが使用されるシナリオ (ファイア アンド フォーゲット タスクなど) では、このイベント ハンドルは割り当てられません。
最近のブログ投稿で、Toub は、.Net 4.5 では内部待機ハンドルは、IAsyncResult.AsyncWaitHandle プロパティを明示的に取得する場合にのみ割り当てられます。さらに、Task オブジェクト自体にはファイナライザーがありません。代わりに、ハンドルはファイナライザーを使用してオブジェクト内にカプセル化されます。ハンドルが割り当てられない限り、ファイナライザーは呼び出されません。
概要
これらの洞察に基づく:
ほとんどの場合、はい、Dispose() を呼び出さなくても問題ありません。ファイナライザーはクリーンアップを処理します。
はい、Stephen Toub のブログ投稿に詳細な説明が記載されています。
ほとんどのシナリオでは、Dispose() を呼び出す必要はありません。
いいえ、使用するパターンですTask.Factory.StartNew() は、ファイアアンドフォーゲットタスクに推奨されるアプローチです。
以上がTPL 内の Fire-and-Forget タスクを破棄する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。