Selam ke dalam penggunaan Task.Start(), Task.Run() dan Task.Factory.StartNew()
Pengenalan
Pustaka Thread Pool (TPL) menyediakan beberapa kaedah untuk mencipta dan menjalankan tugas, termasuk Task.Start(), Task.Run(), dan Task.Factory.StartNew(). Walaupun kaedah ini kelihatan serupa dari segi fungsi, terdapat perbezaan yang ketara dalam penggunaannya dan senario yang boleh digunakan.
Task.Start()
Task.Start(), yang pada asalnya diperkenalkan dengan Rangka Kerja .NET, menyediakan cara untuk mencipta dan memulakan tugas. Walau bagaimanapun, ia dianggap sebagai pendekatan "berbahaya" kerana ia tidak mengikut corak pilihan untuk merangkum penciptaan tugas dan penjadualan ke dalam satu operasi. Ini boleh menyebabkan masalah yang mungkin berlaku dalam beberapa situasi, seperti semasa memproses tugasan yang dibatalkan atau ralat.
Task.Run()
Task.Run() telah ditambahkan dalam .NET 4.5 sebagai cara yang dipermudahkan untuk mencipta dan menjalankan tugas. Ia pada asasnya membalut Task.Factory.StartNew() dengan parameter lalai yang selamat. Task.Run() bertujuan sebagai kaedah kemudahan untuk memunggah kerja ke kumpulan benang, terutamanya apabila menggunakan async dan menunggu corak.
<code class="language-csharp">Task.Run(() => Console.WriteLine("Hello from taskA."));</code>
Task.Factory.StartNew()
Task.Factory.StartNew() ialah kaedah yang paling berkuasa dan serba boleh daripada tiga kaedah. Diperkenalkan dalam .NET 4.0, ia menyediakan kawalan terperinci ke atas penciptaan dan pelaksanaan tugas. Task.Factory.StartNew() membolehkan anda menentukan pilihan seperti penjadual tugas, token pembatalan dan pilihan penciptaan.
<code class="language-csharp">Task taskA = Task.Factory.StartNew(() => Console.WriteLine("Hello from taskA."));</code>
Cadangan penggunaan
Secara amnya, adalah disyorkan untuk menggunakan Task.Run() untuk senario yang paling biasa di mana anda ingin mencipta dan menjalankan tugasan dengan cepat dan mudah. Task.Run() menyediakan cara yang selamat dan cekap untuk memunggah kerja, terutamanya apabila digunakan dengan async dan menunggu.
Gunakan Task.Factory.StartNew() apabila anda memerlukan lebih kawalan ke atas proses penciptaan tugas. Contohnya, apabila anda ingin menentukan penjadual tugas tertentu atau membatalkan token.
Elakkan menggunakan Task.Start() melainkan dalam kes yang jarang berlaku anda perlu menyediakan komponen berasingan untuk penciptaan dan penjadualan tugas.
Kesimpulan
Task.Start(), Task.Run() dan Task.Factory.StartNew() semuanya mempunyai tujuan yang berbeza dan mempunyai kelebihan dan kekurangan mereka sendiri. Task.Run() ialah pilihan yang disyorkan dalam kebanyakan senario, manakala Task.Factory.StartNew() menyediakan lebih fleksibiliti dan kawalan. Elakkan menggunakan Task.Start() melainkan benar-benar perlu.
Atas ialah kandungan terperinci Task.Start(), Task.Run(), dan Task.Factory.StartNew(): Bilakah Saya Perlu Menggunakan Setiap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!