Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Song song hóa dựa trên Task trong C#

Trong C#, Task (namespace System.Threading.Tasks) là đơn vị cơ bản cho lập trình bất đồng bộ và song song. Khác với Thread, Task không tạo luồng OS riêng mà được quản lý bởi TaskScheduler (mặc định dùng ThreadPool).

Các cách tạo và chạy Task

1. Task.Run (khuyên dùng nhất)

Task task = Task.Run(() => 
{
    // Code chạy trên ThreadPool
    for (int i = 0; i <= 1000; i++) { }
    Console.WriteLine("Hoàn thành");
});

task.Wait(); // Đợi hoàn thành

2. Task.Factory.StartNew

Task.Factory.StartNew(() => Console.WriteLine("Chào!"));

3. Task constructor + Start (ít dùng)

Task task = new Task(() => DoWork());
task.Start();

Ví dụ hoàn chỉnh

using System;
using System.Threading.Tasks;

public class Example
{
    public static void Main()
    {
        Task task = Task.Run(() => 
        {
            int a = 0;
            for (a = 0; a <= 1000; a++) { }
            Console.WriteLine($"{a} lần lặp kết thúc");
        });
        
        task.Wait(); // Block cho đến khi task xong
        Console.WriteLine("Main thread tiếp tục");
    }
}

Kết quả đầu ra

1001 lần lặp kết thúc
Main thread tiếp tục

Lưu ý: Dùng async/await thay vì .Wait() hoặc .Result để tránh deadlock trong ứng dụng UI/ASP.NET.