Apabila bekerja dengan Task Parallel Library (TPL) untuk memulakan tugas latar belakang tanpa menunggu penyelesaiannya, persoalan timbul sama ada melupuskan objek Tugas yang dikembalikan adalah penting. Artikel ini bertujuan untuk menangani kebimbangan ini dan meneroka implikasi daripada tidak memanggil kaedah Dispose().
Dalam TPL, kaedah StartNew() mengembalikan objek Task yang melaksanakan antara muka IDisposable. Dokumentasi MSDN untuk Task.Dispose() menyatakan kepentingan memanggil Dispose sebelum mengeluarkan rujukan terakhir kepada Task.
Satu kebimbangan ialah objek Tugas mungkin memperuntukkan sumber yang tidak terurus, seperti pemegang tunggu, yang perlu dikeluarkan secara eksplisit melalui Dispose() untuk mengelakkan kebocoran memori. Walau bagaimanapun, Stephen Toub, ahli pasukan Microsoft pfx, menjelaskan bahawa senario ini tidak mungkin.
Menurut Toub, objek Tugas hanya memperuntukkan pemegang acara apabila menunggunya memerlukan penyekatan (bukannya berputar atau melaksanakan tugas menunggu). Dalam kes penggunaan sambungan, pemegang acara ini tidak sekali-kali diperuntukkan.
Jika tidak dipanggil secara eksplisit, pemuktamad akhirnya akan menuntut semula sebarang sumber yang tidak terurus yang dikaitkan dengan objek Tugas. Walau bagaimanapun, bergantung pada pemuktamadkan mungkin tidak sesuai, terutamanya apabila mengendalikan sejumlah besar tugasan kebakaran dan lupa, kerana ia boleh mengatasi masalah pemuktamad.
Ringkasnya, umum konsensus ialah melupuskan objek Tugas biasanya tidak diperlukan dalam kebanyakan senario. Pengesyoran berikut memberikan panduan:
Atas ialah kandungan terperinci Patutkah Saya Lupuskan Objek Tugas dalam TPL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!