Saya baru mengenal pengembangan C # dan ingin membuat UI yang lebih responsif. Dalam penelitian pendahuluan saya, saya telah melihat dua metode untuk mencapai ini:
- Multi-threading bersamaan dengan kelas BackgroundWorker.
- Pengubah Async / Await yang lebih baru.
Apakah yang lebih baru berarti lebih baik? Apa perbedaan antara kedua metode ini? Jika saya ingin membuat proyek baru, bagaimana cara memilih metode mana yang cocok?
EDIT: Mungkin saya harus menentukan. Saya membuat aplikasi Windows Forms, di mana semua data yang diperlukan akan disimpan / dimuat pada disk lokal. Saya juga akan berkomunikasi dengan beberapa perangkat USB.
c#
.net
multithreading
async
robert.ecot
sumber
sumber
Jawaban:
Anda akan dapat menyelesaikan tugas Anda menggunakan
BackgroundWorker
. Ini adalah kelas yang terkenal, dan banyak orang telah menggunakannya.C # 5
async
danawait
kata kunci baru pada dasarnya hanya membuatnya lebih mudah untuk menulis kode asinkron yang dapat dibaca. Mungkin ada lebih sedikit tutorial dan contoh cara menyelesaikan berbagai tugas dengan kata kunci ini daripadaBackgroundWorker
.Kecuali jika Anda perlu menggunakan versi C # yang lebih lama, saya sarankan mempelajari cara menggunakan
async
danawait
.sumber
Kata kunci
async
danawait
tidak akan membuat aplikasi Anda lebih responsif sendiri. Mereka hanya membuat panggilan dan penanganan metode yang mengembalikanTask
objek lebih nyaman. Untuk membuatasync
/await
benar-benar menggunakan utas latar belakang, Anda harus menggabungkan dengan penggunaan hal-hal seperti:Task.Start()
- Mulai tugas yang diberikan menggunakanTaskScheduler
.TaskCompletionSource
- Cara kustom untuk menangani tugas-tugas async. Satu tempat saya menggunakan ini adalah untuk menangani acara yang berasal dariWebBrowser
kontrol.async
Metode lain , seperti banyak fungsi di Win 8 API.Dengan kata lain,
async
/await
adalah perpanjangan dari Pola Asinkron Berbasis Tugas . Anda dapat menemukan sejumlah besar informasi, termasuk banyak sampel, di sini .Ini
BackgroundWorker
adalah komponen WinForms yang membuat 1 utas latar belakang menggunakan pola Asynchronous Berbasis Kejadian , dan Anda dapat mengisi pekerjaan yang dilakukan pada utas latar belakang ini dengan kode Anda sendiri diDoWork
pengendali acara. Secara umum, Microsoft tidak lagi merekomendasikan untuk menggunakan pola ini (lihat bagian bawah halaman di sini ), meskipun jika Anda sudah mengenalnya, itu mungkin masih merupakan opsi sederhana.Pilihan lain yang tidak disebutkan, adalah ekstensi reaktif untuk .NET . Ini adalah kerangka kerja hebat lainnya untuk menambahkan daya tanggap ke aplikasi Anda.
sumber
BackgroundWorker
, secara khusus, disarankan untuk tidak.Saya akan mengatakan bahwa
async
-await
jauh lebih fleksibel daripadaBackgroundWorker
. Dan jika Anda ingin melakukan sesuatu yang cocokBackgroundWorker
, Anda dapat melakukannya denganasync
-await
juga, dengan kode yang lebih mudah dibaca dan lebih aman.Karena itu, saya pikir Anda sebaiknya memilih
async
-await
overBackgroundWorker
.sumber