Rumah >pembangunan bahagian belakang >Tutorial C#.Net >Dapatkan pemahaman yang lebih mendalam tentang tugasan dalam C#
Penjelasan terperinci tentang Tugasan C#, contoh kod khusus diperlukan
Pengenalan:
Dalam pengaturcaraan berbilang benang C#, Task ialah model pengaturcaraan yang biasa digunakan untuk melaksanakan operasi tak segerak. Tugasan menyediakan cara mudah untuk mengendalikan tugas serentak, boleh melakukan operasi tak segerak secara selari pada berbilang urutan dan boleh mengendalikan pengecualian dan mengembalikan nilai dengan mudah. Artikel ini akan memperkenalkan penggunaan C# Task secara terperinci dan memberikan beberapa contoh kod khusus.
1. Penciptaan dan pengendalian Tugas
Kaedah untuk mencipta objek Tugas
Terdapat banyak cara untuk mencipta objek Tugas dalam C#, tiga berikut biasanya digunakan:
a. Gunakan kaedah Task.Run
mencipta:
Task task = new Task(() => { // 异步任务逻辑 });
c Menggunakan kaedah TaskFactory.StartNew
untuk mencipta: Task.Run
方法创建:
Task task = Task.Run(() => { // 异步任务逻辑 });
c. 使用TaskFactory.StartNew
方法创建:
TaskFactory taskFactory = new TaskFactory(); Task task = taskFactory.StartNew(() => { // 异步任务逻辑 });
Task的启动和等待
任务创建完成后,可以通过调用Task.Start
方法来启动任务的执行。然后可以使用Task.Wait
方法来等待任务完成。示例如下:
task.Start(); // 启动任务 task.Wait(); // 等待任务完成
需要注意的是,如果使用Task.Run
或TaskFactory.StartNew
创建的任务,会自动启动,不需要调用Start
方法。
Task的取消
在某些情况下,需要取消一个正在执行的任务。可以使用CancellationToken
来实现任务的取消。示例如下:
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); CancellationToken cancellationToken = cancellationTokenSource.Token; Task task = Task.Run(() => { while (true) { // 检查任务是否被取消 if (cancellationToken.IsCancellationRequested) { break; } // 异步任务逻辑 } }, cancellationToken); // 取消任务 cancellationTokenSource.Cancel();
在任务的逻辑中,通过定期检查CancellationToken.IsCancellationRequested
属性来判断任务是否需要取消。
二、Task的异常处理和返回值
异常处理
在异步任务中,如果发生异常,默认情况下任务会直接抛出异常导致程序崩溃。为了处理任务中的异常,可以在任务中使用try...catch
语句来捕获异常,并处理异常的逻辑。示例如下:
Task task = Task.Run(() => { try { // 异步任务逻辑 } catch (Exception ex) { // 异常处理逻辑 } });
返回值
有时候需要从异步任务中获取返回值。使用Task<tresult></tresult>
类可以实现任务的返回值传递。TResult
是返回值的类型。示例如下:
Task<int> task = Task.Run(() => { // 异步任务逻辑 return 42; }); int result = task.Result;
在上述示例中,Task<int></int>
表示该任务返回一个整数。通过Task.Result
属性可以获取到返回值。
三、Task的并行执行
Task可以方便地实现任务的并行执行,提高程序的性能。C#提供了Parallel
类来简化并行编程。示例如下:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; // 并行执行计算 Parallel.ForEach(numbers, number => { Console.WriteLine(number * number); });
上述示例中,使用Parallel.ForEach
rrreee
Permulaan tugas dan menunggu
Selepas penciptaan tugas. selesai , anda boleh memulakan pelaksanaan tugas dengan memanggil kaedah Task.Start
. Anda kemudian boleh menggunakan kaedah Task.Wait
untuk menunggu tugasan selesai. Contohnya adalah seperti berikut:
Task.Run
atau TaskFactory.StartNew
, ia akan dimulakan secara automatik dan terdapat tidak perlu memanggil kaedah Start
. 🎜🎜🎜Pembatalan tugas🎜Dalam sesetengah kes, tugasan yang dilaksanakan perlu dibatalkan. Anda boleh menggunakan CancellationToken
untuk membatalkan tugas. Contohnya adalah seperti berikut: 🎜rrreee🎜Dalam logik tugasan, tentukan sama ada tugasan itu perlu dibatalkan dengan kerap menyemak harta CancellationToken.IsCancellationRequested
. 🎜🎜2. Pengendalian pengecualian tugas dan nilai pulangan 🎜🎜🎜🎜Pengendalian pengecualian🎜Dalam tugas tak segerak, jika pengecualian berlaku, secara lalai tugas akan membuang pengecualian secara langsung dan menyebabkan program untuk terhempas. Untuk mengendalikan pengecualian dalam tugasan, anda boleh menggunakan pernyataan try...catch
dalam tugasan untuk menangkap pengecualian dan mengendalikan logik pengecualian. Contohnya adalah seperti berikut: 🎜rrreee🎜🎜Nilai pulangan🎜Kadangkala anda perlu mendapatkan nilai pulangan daripada tugas tak segerak. Gunakan kelas Task<tresult></tresult>
untuk merealisasikan pemindahan nilai pulangan tugas. TResult
ialah jenis nilai pulangan. Contohnya adalah seperti berikut: 🎜rrreee🎜Dalam contoh di atas, Task<int></int>
bermaksud tugas itu mengembalikan integer. Nilai pulangan boleh diperolehi melalui harta Task.Result
. 🎜🎜3. Pelaksanaan Tugasan selari🎜Task boleh dengan mudah melaksanakan pelaksanaan tugasan selari dan meningkatkan prestasi program. C# menyediakan kelas Parallel
untuk memudahkan pengaturcaraan selari. Contohnya adalah seperti berikut: 🎜rrreee🎜Dalam contoh di atas, kaedah Parallel.ForEach
digunakan untuk melakukan pengiraan segi empat sama pada senarai nombor secara selari. Ia boleh dilihat bahawa tugas pengkomputeran dengan nombor yang berbeza boleh dilaksanakan secara selari pada benang yang berbeza. 🎜🎜Ringkasan: 🎜Artikel ini memperkenalkan penggunaan C# Task secara terperinci dan menyediakan beberapa contoh kod khusus. Dengan menggunakan Tugas, anda boleh melaksanakan operasi tak segerak dengan mudah dan meningkatkan prestasi serentak program. Pada masa yang sama, Task juga menyediakan mekanisme pengendalian pengecualian mudah dan penyampaian nilai pulangan, menjadikan pengaturcaraan serentak lebih fleksibel dan lebih mudah untuk diselenggara. Saya berharap pembaca akan mempunyai pemahaman yang lebih mendalam tentang Tugasan C# melalui pengenalan dan contoh artikel ini, dan boleh menggunakannya secara fleksibel dalam projek sebenar. 🎜Atas ialah kandungan terperinci Dapatkan pemahaman yang lebih mendalam tentang tugasan dalam C#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!