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.