Menggunakan alur dan pengaluran

Dengan .NET, Anda dapat menulis aplikasi yang melakukan beberapa operasi secara bersamaan. Operasi dengan potensi menahan operasi lain dapat dijalankan pada alur terpisah, proses yang dikenal sebagai multithreading atau pengaluran bebas.

Aplikasi yang menggunakan multithreading lebih responsif terhadap input pengguna karena antarmuka pengguna tetap aktif saat tugas intensif prosesor dijalankan pada alur terpisah. Multithreading juga berguna saat Anda membuat aplikasi yang dapat diskalakan karena Anda dapat menambahkan utas saat beban kerja meningkat.

Catatan

Jika Anda memerlukan kontrol lebih atas perilaku alur aplikasi, Anda dapat mengelola alur sendiri. Namun, pemrograman multithread sangat disederhanakan dengan System.Threading.Tasks.Parallel kelas dan System.Threading.Tasks.Task , Parallel LINQ (PLINQ), kelas koleksi bersamaan di System.Collections.Concurrent namespace, dan model pemrograman yang didasarkan pada konsep tugas daripada utas. Untuk informasi selengkapnya, lihat Pemrograman Paralel dan Pustaka Paralel Tugas (TPL).

Cara: Membuat dan memulai alur baru

Anda membuat utas baru dengan membuat instans System.Threading.Thread baru kelas. Anda memberikan nama metode yang ingin Anda jalankan pada utas baru ke konstruktor. Untuk memulai alur yang dibuat, panggil Thread.Start metode. Untuk informasi dan contoh selengkapnya, lihat artikel Membuat alur dan meneruskan data pada waktu mulai dan Thread referensi API.

Cara: Menghentikan alur

Untuk mengakhiri eksekusi alur, gunakan System.Threading.CancellationToken. Ini menyediakan cara terpadu untuk menghentikan alur secara kooperatif. Untuk informasi selengkapnya, lihat Pembatalan di alur terkelola .

Terkadang tidak mungkin untuk menghentikan utas secara kooperatif karena menjalankan kode pihak ketiga yang tidak dirancang untuk pembatalan kooperatif. Dalam hal ini, Anda mungkin ingin mengakhiri eksekusinya secara paksa. Untuk mengakhiri eksekusi alur secara paksa, dalam .NET Framework Anda dapat menggunakan metode .Thread.Abort Metode itu menaikkan pada alur ThreadAbortException tempat ia dipanggil. Untuk informasi selengkapnya, lihat Menghancurkan alur. Metode Thread.Abort ini tidak didukung di .NET Core. Jika Anda perlu mengakhiri eksekusi kode pihak ketiga secara paksa di .NET Core, jalankan dalam proses terpisah dan gunakan Process.Kill metode .

System.Threading.CancellationToken tidak tersedia sebelum .NET Framework 4. Untuk menghentikan utas dalam versi .NET Framework yang lebih lama, gunakan teknik sinkronisasi utas untuk mengimplementasikan pembatalan kooperatif secara manual. Misalnya, Anda dapat membuat bidang shouldStop boolean volatil dan menggunakannya untuk meminta kode yang dijalankan oleh utas untuk berhenti. Untuk informasi selengkapnya, lihat volatil dalam Referensi C# dan System.Threading.Volatile.

Gunakan Thread.Join metode untuk membuat alur panggilan menunggu penghentian alur dihentikan.

Cara: Menjeda atau menyela alur

Anda menggunakan Thread.Sleep metode untuk menjeda alur saat ini untuk jangka waktu tertentu. Anda dapat menyela alur yang diblokir dengan memanggil Thread.Interrupt metode. Untuk informasi selengkapnya, lihat Menjeda dan menyela alur.

Properti alur

Tabel berikut menyajikan beberapa Thread properti:

Properti Deskripsi
IsAlive Mengembalikan jika utas true telah dimulai dan belum dihentikan secara normal atau dibatalkan.
IsBackground Mendapatkan atau mengatur Boolean yang menunjukkan apakah alur adalah alur latar belakang. Utas latar belakang seperti utas latar depan. Namun, utas latar belakang tidak mencegah proses berhenti. Setelah semua alur latar depan yang termasuk dalam proses berhenti, runtime bahasa umum mengakhiri proses dengan memanggil Abort metode pada alur latar belakang yang masih hidup. Untuk informasi selengkapnya, lihat Alur Latar Depan dan Latar Belakang.
Name Mengambil atau mengatur nama alur. Paling sering digunakan untuk menemukan alur individual saat Anda melakukan debug.
Priority Mendapatkan atau menetapkan nilai yang digunakan oleh sistem operasi untuk memprioritaskan penjadwalan utas ThreadPriority . Untuk informasi selengkapnya, lihat Menjadwalkan alur dan ThreadPriority referensi.
ThreadState Mendapatkan nilai yang ThreadState berisi status alur saat ini.

Lihat juga