.NET TPL: Memahami Task.Run(), Task.Factory.StartNew(), dan Task.Start()
Concurrency adalah penting dalam aplikasi moden, dan Task Parallel Library (TPL) dalam .NET menyediakan alatan berkuasa untuk mengurus operasi serentak. Artikel ini menjelaskan perbezaan antara Task.Run()
, Task.Factory.StartNew()
dan Task.Start()
untuk mencipta dan memulakan tugas.
Mencipta dan Menjalankan Tugasan dalam TPL
Tugas TPL mewakili unit kerja bebas. Anda mentakrifkan kerja menggunakan ungkapan perwakilan atau lambda, dan kemudian menjadualkannya untuk pelaksanaan. Tiga kaedah utama memudahkan ini:
Task.Start()
: Dianggap usang; gunakan Task.Factory.StartNew()
sebaliknya.Task.Run()
: Diperkenalkan dalam .NET 4.5, kaedah ringkas ini menawarkan cara yang selamat dan cekap untuk menjalankan tugas pada kumpulan benang.Task.Factory.StartNew()
: Menyediakan kawalan terperinci ke atas penciptaan tugas dan penjadualan, membolehkan penyesuaian lanjutan.Perbezaan Utama dan Amalan Terbaik
Walaupun ketiga-tiga kaedah akhirnya melaksanakan tugas, kefungsian dan kesesuaiannya berbeza-beza:
Task.Run()
: Pendekatan yang disyorkan untuk kebanyakan senario. Ia memanfaatkan kumpulan benang secara tersirat, memudahkan penciptaan tugas dan menghalang potensi isu dengan lampiran tugas kanak-kanak. Sifatnya yang mudah menjadikannya sesuai untuk operasi tak segerak tujuan umum.
Task.Factory.StartNew()
: Gunakan ini apabila tingkah laku lalai Task.Run()
tidak mencukupi. Ia membolehkan anda menentukan pilihan seperti TaskCreationOptions.LongRunning
(untuk tugasan yang berjalan lama) dan memilih penjadual tersuai. Ini memberikan fleksibiliti maksimum tetapi memerlukan pemahaman yang lebih mendalam tentang dalaman TPL.
Task.Start()
: Elakkan kaedah ini melainkan benar-benar perlu kerana kekurangan kawalan dan potensi masalah penyegerakan. Ia sebaiknya digantikan dengan Task.Factory.StartNew()
.
Bila Menggunakan Setiap Kaedah
Task.Run()
: Pilihan lalai untuk kebanyakan operasi tak segerak. Kesederhanaan dan kecekapannya menjadikannya kaedah pilihan bagi kebanyakan pembangun.
Task.Factory.StartNew()
: Gunakan ini apabila:
TaskCreationOptions
khusus (cth., LongRunning
).Task.Start()
.Task.Start()
: Secara umumnya, elakkan menggunakan kaedah ini.
Contoh:
<code class="language-csharp">// Using Task.Run() Task taskA = Task.Run(() => Console.WriteLine("Hello from TaskA")); // Using Task.Factory.StartNew() with TaskCreationOptions.LongRunning Task taskB = Task.Factory.StartNew(() => { Console.WriteLine("Hello from TaskB"); }, TaskCreationOptions.LongRunning);</code>
Atas ialah kandungan terperinci Task.Run(), Task.Factory.StartNew(), dan Task.Start(): Bilakah Saya Harus Menggunakan Setiap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!