Adakah Pelupusan Tugasan Diperlukan untuk Tugasan Latar Belakang Kebakaran-dan-Lupakan?
Apabila melakukan tugasan kebakaran-dan-lupa pada urutan latar belakang, pembangun sering menggunakan kaedah Task Parallel Library (TPL) Task.Factory.StartNew(). Kaedah ini mengembalikan objek Tugas, menimbulkan kebimbangan tentang pelupusan yang betul.
dokumentasi msdn mencadangkan memanggil Dispose() sebelum mengeluarkan rujukan terakhir kepada Task. Walau bagaimanapun, menunggu penyelesaian tugas untuk menggunakan kaedah ini menafikan tujuan pelaksanaan latar belakang.
Perbincangan
Menurut Stephen Toub dari pasukan Microsoft pfx, objek Tugas mungkin balut pemegang acara apabila menunggu siap. Walau bagaimanapun, jika sambungan digunakan, pemegang ini tidak pernah diperuntukkan. Oleh itu, pemuktamadan ialah kaedah pembersihan yang mencukupi.
Kemas kini (Oktober 2012)
Catatan blog Toub "Adakah Saya Perlu Lupuskan Tugasan?" memberikan penjelasan lanjut. Dalam .NET 4.5, Task hanya memperuntukkan pemegang menunggu dalaman apabila AsyncWaitHandle digunakan secara eksplisit. Tambahan pula, Task tidak mempunyai pemuktamad; mana-mana pemegang yang diperuntukkan dibalut dengan objek dengan pemuktamad. Ini bermakna melupuskan kebanyakan objek Tugas adalah tidak perlu.
Kesimpulan
Dalam kebanyakan kes, adalah boleh diterima untuk mengelak daripada memanggil Dispose() pada objek Tugas yang digunakan untuk kebakaran -dan-lupa tugas latar belakang. Penamatan biasanya akan mencukupi untuk pembersihan sumber. Walau bagaimanapun, jika AsyncWaitHandle digunakan atau aplikasi mengalami pergantungan berat pada tugasan sedemikian, pelupusan eksplisit mungkin dibenarkan.
Atas ialah kandungan terperinci Adakah Saya Perlu Lupuskan Tugasan dalam Operasi Latar Belakang Kebakaran dan Lupakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!