Tugas Kebakaran-dan-Lupakan dengan Pustaka Selari Tugas: Kebimbangan Pelupusan
Apabila mencetuskan tugasan kebakaran-dan-lupakan dengan Task Parallel Perpustakaan (TPL), pembangun biasanya menghadapi soalan tentang pelupusan objek Tugas dengan betul. Walaupun dokumentasi MSDN menekankan keperluan untuk memanggil Dispose() sebelum mengeluarkan rujukan terakhir, implikasi praktikal daripada tidak berbuat demikian adalah tidak jelas.
Menurut Stephen Toub Microsoft, Pelupusan Tugas wujud terutamanya untuk mengendalikan sumber yang mungkin tidak terurus. digunakan semasa menunggu tugasan selesai. Walau bagaimanapun, dalam senario di mana hanya kesinambungan digunakan (seperti dalam tugasan kebakaran-dan-lupa), pemegang acara ini tidak diperuntukkan.
Dalam catatan blog baru-baru ini, Toub menjelaskan lagi bahawa dalam .Net 4.5, bahagian dalaman pemegang tunggu hanya diperuntukkan apabila secara eksplisit mendapatkan semula sifat IAsyncResult.AsyncWaitHandle. Selain itu, objek Tugas itu sendiri tidak mempunyai pemuktamad; sebaliknya, pemegang dikapsulkan dalam objek dengan pemuktamad. Melainkan pemegangnya diperuntukkan, tiada pemuktamad akan digunakan.
Ringkasan
Berdasarkan cerapan ini:
Dalam kebanyakan kes, ya, adalah boleh diterima untuk tidak memanggil Dispose(). Penyelesai akan mengendalikan pembersihan.
Ya, catatan blog Stephen Toub memberikan penjelasan terperinci.
Memanggil Dispose() tidak perlu dalam kebanyakan senario.
Tidak, corak penggunaan Task.Factory.StartNew() ialah pendekatan yang dicadangkan untuk tugasan api-dan-lupa.
Atas ialah kandungan terperinci Patutkah Saya Membuang Tugasan Kebakaran dan Lupakan dalam TPL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!