Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penjelasan terperinci tentang C#Task

Penjelasan terperinci tentang C#Task

小老鼠
小老鼠asal
2024-03-14 09:54:071372semak imbas

Task ialah objek yang digunakan untuk mewakili operasi tak segerak dalam C# Ia terletak dalam ruang nama System.Threading.Tasks. Task menyediakan API peringkat tinggi untuk mengendalikan operasi serentak, tak segerak, menjadikannya lebih mudah untuk menulis kod tak segerak dalam aplikasi .NET.

Penjelasan terperinci tentang C#Task

Task ialah objek yang digunakan untuk mewakili operasi tak segerak dalam C# dan ia terletak dalam ruang nama System.Threading.Tasks. Task menyediakan API peringkat tinggi untuk mengendalikan operasi serentak, tak segerak, menjadikannya lebih mudah untuk menulis kod tak segerak dalam aplikasi .NET. Berikut ialah penerangan terperinci tentang beberapa ciri utama dan penggunaan Tugas.

1 Buat Tugasan Anda boleh menggunakan kaedah Task.Run untuk melaksanakan operasi pada benang latar belakang dan mengembalikan objek Tugasan yang mewakili operasi.

csharp

Task task = Task.Run(() =>  
{  
    // 这里是后台线程上执行的代码  
    Console.WriteLine("Running in a separate thread.");  
});

2 Tunggu Tugasan selesai

Anda boleh menggunakan kaedah Tugas.Tunggu untuk menunggu satu atau lebih objek Tugasan selesai.

csharp

task.Wait(); // 等待 task 完成

Sebagai alternatif, anda boleh menggunakan kata kunci tunggu (dalam kaedah async) untuk menunggu secara tak segerak sehingga Tugasan selesai tanpa menyekat urutan semasa. . dan Faulted (ralat telah berlaku). Anda boleh menyemak status semasa Tugas melalui sifat Task.Status.

4. Pengendalian pengecualian

Jika pengecualian berlaku dalam Tugasan dan pengecualian tidak ditangkap, status Tugasan akan Disalahkan. Anda boleh mengakses maklumat pengecualian melalui sifat Task.Exception. Apabila menggunakan await, ungkapan await akan membuang semula pengecualian dan anda perlu mengendalikannya dalam blok cuba-tangkap.

csharp

await task; // 异步等待 task 完成

5. Nilai pulangan Task

Jika Tugasan mewakili pengiraan atau operasi, dan anda ingin mengembalikan hasilnya, maka anda boleh menggunakan Taskb54c2c292509147c0b54128f4eb90887, dengan TResult ialah jenis nilai pulangan.

csharp

try  
{  
    await task;  
}  
catch (AggregateException ae)  
{  
    // 处理异常  
}

6 Pembatalan Tugas

Anda boleh menggunakan CancellationToken untuk membatalkan satu atau lebih Tugasan.

csharp

Task<int> taskWithResult = Task.Run(() =>  
{  
    // 执行一些计算  
    return 42;  
});  
  
int result = await taskWithResult; // 异步等待并获取结果

7. Gabungan Tugas

Anda boleh menggunakan Task.WhenAll atau Task.WhenAny untuk menunggu beberapa objek Tugasan selesai. Task.WhenAll menunggu semua tugasan selesai, manakala Task.WhenAny menunggu untuk mana-mana satu tugasan selesai.

csharp

CancellationTokenSource cts = new CancellationTokenSource();  
Task cancellableTask = Task.Run(() =>  
{  
    for (int i = 0; i < 100; i++)  
    {  
        cts.Token.ThrowIfCancellationRequested();  
        // 执行一些操作  
    }  
}, cts.Token);  
  
// 在某个时刻取消任务  
cts.Cancel();

8 Konfigurasikan konteks pelaksanaan Tugas

Dengan mengkonfigurasi Penjadual Tugas, anda boleh mengawal utas atau rangkaian mana Tugas dilaksanakan. Ini berguna dalam senario di mana kawalan yang lebih halus ke atas penggunaan benang diperlukan.

Task ialah alat yang berkuasa untuk mengendalikan pengaturcaraan tak segerak dalam .NET, membolehkan anda menulis kod yang lebih responsif dan cekap, terutamanya apabila berurusan dengan tugasan intensif I/O atau intensif pengiraan. Dengan memahami konsep asas dan penggunaan Tasks, anda boleh memanfaatkan model pengaturcaraan tak segerak untuk meningkatkan prestasi dan kebolehskalaan aplikasi anda dengan lebih baik.

Atas ialah kandungan terperinci Penjelasan terperinci tentang C#Task. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn