C# 提供了多种方式来实现并发编程,其中常用的包括多线程和异步操作。
多线程: 在 C# 中,可以通过创建线程来实现多线程编程。常见的方式包括使用 Thread 类和 ThreadPool 类。使用 Thread 类需要手动创建线程,启动线程并管理线程的生命周期,而使用 ThreadPool 类则可以让 .NET 框架来管理线程池,从而减少了手动管理的工作量。
以下是使用 Thread 类实现多线程的示例代码:
using System;
using System.Threading;
class Program
{
static void Main(string[] args)
{
// 创建线程并启动
Thread t = new Thread(new ThreadStart(DoWork));
t.Start();
// 主线程继续执行其他任务
Console.WriteLine("Main thread is working...");
// 等待子线程完成工作
t.Join();
Console.WriteLine("All work is done.");
}
static void DoWork()
{
Console.WriteLine("Child thread is working...");
Thread.Sleep(5000); // 模拟耗时操作
Console.WriteLine("Child thread is done.");
}
}
异步操作: 异步操作可以提高程序的响应性能,避免因为 I/O 操作等阻塞操作导致的性能问题。在 C# 中,可以使用 async 和 await 关键字来实现异步操作。
以下是使用 async 和 await 实现异步操作的示例代码:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
Console.WriteLine("Start downloading file...");
// 异步下载文件
await DownloadFileAsync();
Console.WriteLine("Download is done.");
}
static async Task DownloadFileAsync()
{
// 模拟下载文件需要 5 秒钟
await Task.Delay(5000);
Console.WriteLine("File is downloaded.");
}
}
在使用异步操作时需要注意以下几点:
- 异步操作必须返回 Task 或 Task<T> 类型;
- 使用 await 关键字等待异步操作完成;
- 异步操作中的代码不能修改 UI 界面,需要使用 Dispatcher 来更新 UI 界面。
以上是 C# 中实现多线程和异步操作的基本方式和示例代码。在实际开发中,需要根据具体需求选择合适的方式来实现并发编程。同时,在使用并发编程时需要注意线程安全问题和性能调优问题。