Kelas tugas
Kelas Task adalah abstraksi operasi asinkron yang disediakan setelah .NET 4.0, dengan jalur lengkap ke System.Threading.Tasks.Task.
Kelas Task digunakan untuk mewakili operasi asinkron tanpa nilai pengembalian, dan untuk operasi asinkron dengan nilai pengembalian, subkelas Task dari kelas Task harus digunakan<TResult>. Tugas yang dibuat oleh kelas Tugas ditambahkan ke kumpulan utas.
<TResult>Konstruktor utama kelas Task/Task adalah sebagai berikut:
Setelah dibuat, tugas dapat dimulai menggunakan metode Start():
Dalam pengembangan aktual, metode statis Run() dari kelas Task atau metode anggota StartNew() dari kelas pabrik TaskFactory lebih sering digunakan untuk membuat dan memulai tugas baru.
Beberapa metode umum di kelas Task:
Kata kunci async/await
C# 5.0 memperkenalkan kata kunci asinkron dan await, yang memberikan dukungan yang lebih baik untuk konkurensi di tingkat bahasa.
Async digunakan untuk menandai metode asinkron: Kata kunci asinkron adalah kata kunci kontekstual dan hanya akan diperlakukan sebagai kata kunci saat memodifikasi metode dan Lambda, dan akan diperlakukan sebagai pengidentifikasi di area lain. Kata kunci asinkron dapat menandai metode statis, tetapi bukan titik masuk (metode Main().
Nilai yang dikembalikan dari metode yang ditandai dengan asinkron harus <TResult>salah satu dari Tugas, Tugas, atau void. await digunakan untuk menunggu hasil metode asinkron:
Kata kunci await juga merupakan kata kunci kontekstual dan hanya dianggap sebagai kata kunci dalam metode yang ditandai asinkron. Kata kunci await dapat digunakan sebelum metode asinkron dan Task, dan <TResult>Task, untuk menunggu akhir eksekusi tugas asinkron. Struktur metode asinkron sederhana adalah sebagai berikut:
Bukan berarti metode ditandai dengan kata kunci asinkron, ini adalah metode asinkron, dan pernyataan yang muncul langsung di dalam metode asinkron juga dijalankan secara sinkron,Konten yang dijalankan secara asinkron perlu dijalankan menggunakan kelas Task。 Faktanya, metode asinkron yang tidak berisi pernyataan await akan dieksekusi secara sinkron, di mana kompiler akan memberikan peringatan.
Contoh sederhana, menggunakan async/await untuk mengeluarkan konten secara bersamaan di layar:
Keluaran: (Mono 4.4.0 && ArchLinux x64)
Tidak sulit untuk melihat dari program di atas bahwa dalam kata kunci asinkron yang ditandai metode asinkron, kode sebelum menggunakan await dijalankan secara sinkron, dan setelah await dipanggil, kode yang tersisa berjalan secara asinkron pada utas terpisah.
|