当涉及到多线程编程时,C# 提供了许多工具和库来简化任务。以下是更多关于C#中多线程的例子:
异步和 await: 使用 async
和 await
关键字可以轻松实现异步编程,而不必直接操作线程。这对于处理 I/O 操作等异步任务非常有用。
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
Console.WriteLine("Main Thread: Start");
// 异步调用
await MyAsyncMethod();
Console.WriteLine("Main Thread: End");
}
static async Task MyAsyncMethod()
{
Console.WriteLine("Async Method: Start");
await Task.Delay(2000); // 模拟异步操作
Console.WriteLine("Async Method: End");
}
}
Parallel 类: System.Threading.Tasks.Parallel
类提供了一些用于并行处理的静态方法。这对于并行执行迭代操作非常有用。
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
Console.WriteLine("Main Thread: Start");
// 使用 Parallel.ForEach 并行处理集合
Parallel.ForEach(new[] { 1, 2, 3, 4, 5 }, item =>
{
Console.WriteLine("Parallel Thread: " + item);
});
Console.WriteLine("Main Thread: End");
}
}
Mutex(互斥体): 使用 Mutex
类可以实现线程同步,确保多个线程之间的互斥访问。
using System;
using System.Threading;
class Program
{
static Mutex mutex = new Mutex();
static void Main()
{
for (int i = 0; i < 3; i++)
{
Thread t = new Thread(MyThreadMethod);
t.Start();
}
}
static void MyThreadMethod()
{
mutex.WaitOne();
Console.WriteLine("Thread entered: " + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000);
Console.WriteLine("Thread exited: " + Thread.CurrentThread.ManagedThreadId);
mutex.ReleaseMutex();
}
}
Monitor 类: Monitor
类提供了一种基本的线程同步机制,可以使用 lock
关键字来简化代码。
using System;
using System.Threading;
class Program
{
static object lockObject = new object();
static void Main()
{
for (int i = 0; i < 3; i++)
{
Thread t = new Thread(MyThreadMethod);
t.Start();
}
}
static void MyThreadMethod()
{
lock (lockObject)
{
Console.WriteLine("Thread entered: " + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000);
Console.WriteLine("Thread exited: " + Thread.CurrentThread.ManagedThreadId);
}
}
}
这些例子展示了在C#中使用异步、并行编程和线程同步的一些建议方法。根据实际需求和情境,你可以选择适合你应用程序的方法。确保在多线程编程中处理好线程同步和异常处理。