Xử lý đa luồng trong C#
Hướng dẫn chi tiết về cách xử lý đa luồng trong C# giúp bạn tận dụng hiệu quả tài nguyên của CPU, đồng thời tăng hiệu suất của ứng dụng thông qua việc thực thi nhiều công việc đồng thời.
Bài viết này sẽ giới thiệu cách tạo và quản lý luồng trong C# bằng cách sử dụng Thread
và Task
. Chúng ta sẽ thực hiện các ví dụ minh họa giúp bạn hiểu rõ cách ứng dụng đa luồng vào lập trình.
Mã C#:
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
// Phương thức chạy trên luồng riêng biệt
static void PrintNumbers()
{
for (int i = 1; i <= 5; i++)
{
Console.WriteLine($"Số: {i}");
Thread.Sleep(1000); // Tạm dừng 1 giây
}
}
static async Task PrintNumbersAsync()
{
await Task.Run(() => PrintNumbers());
}
static void Main(string[] args)
{
Console.WriteLine("Bắt đầu xử lý đa luồng...");
// Tạo một luồng mới
Thread thread = new Thread(PrintNumbers);
thread.Start();
// Sử dụng Task để xử lý bất đồng bộ
Task task = PrintNumbersAsync();
// Chờ thread kết thúc
thread.Join();
task.Wait();
Console.WriteLine("Xử lý hoàn tất.");
}
}
Giải thích chi tiết từng dòng code:
-
PrintNumbers()
: Một phương thức chạy trên một luồng riêng biệt, in ra các số từ 1 đến 5 và tạm dừng 1 giây giữa mỗi lần in. -
PrintNumbersAsync()
: Phương thức bất đồng bộ sử dụngTask.Run
để thực thiPrintNumbers
. -
Main()
:- Tạo một
Thread
mới và bắt đầu thực thiPrintNumbers
. - Sử dụng
Task
để chạyPrintNumbersAsync
. -
thread.Join()
: Đợi cho đến khi luồng hoàn tất. -
task.Wait()
: Đợi Task hoàn tất.
- Tạo một
Yêu cầu hệ thống:
- C# 7.0 hoặc mới hơn
- .NET Core 2.1 hoặc .NET Framework 4.5 trở lên
Cách cài đặt các thư viện để chạy được đoạn mã C# trên:
Cần cài đặt .NET Core SDK từ https://dotnet.microsoft.com/download.
Lời khuyên:
- Nên sử dụng
Task
vàasync/await
khi có thể để đơn giản hóa việc quản lý luồng. - Hạn chế tạo quá nhiều luồng đồng thời vì có thể làm chậm hiệu suất.