在C#中,"wait"关键字通常与线程同步相关,如等待一个任务完成或等待某个条件成立。以下是一些关于如何在C#中正确使用"wait"关键字的示例:
- 使用
Thread.Wait()
:
using System; using System.Threading; class Program { static void Main() { Thread thread = new Thread(DoWork); thread.Start(); // 等待线程完成 thread.Join(); } static void DoWork() { Console.WriteLine("Thread started."); Thread.Sleep(2000); // 模拟耗时操作 Console.WriteLine("Thread finished."); } }
- 使用
Task.Wait()
:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
await Task.Run(DoWork);
}
static void DoWork()
{
Console.WriteLine("Thread started.");
Thread.Sleep(2000); // 模拟耗时操作
Console.WriteLine("Thread finished.");
}
}
- 使用
Monitor.Wait()
:
using System; using System.Threading; class Program { private static readonly object lockObject = new object(); private static int counter = 0; static void Main() { Thread thread1 = new Thread(IncrementCounter); Thread thread2 = new Thread(CheckCounter); thread1.Start(); thread2.Start(); thread1.Join(); thread2.Join(); } static void IncrementCounter() { lock (lockObject) { counter++; Monitor.Pulse(lockObject); // 通知等待的线程 } } static void CheckCounter() { lock (lockObject) { while (counter == 0) { Monitor.Wait(lockObject); // 等待计数器变为非零 } Console.WriteLine("Counter is not zero."); } } }
- 使用
ManualResetEvent
:
using System; using System.Threading; class Program { private static ManualResetEvent resetEvent = new ManualResetEvent(false); static void Main() { Thread thread = new Thread(DoWork); thread.Start(); // 等待线程完成 resetEvent.WaitOne(); } static void DoWork() { Console.WriteLine("Thread started."); Thread.Sleep(2000); // 模拟耗时操作 Console.WriteLine("Thread finished."); // 通知主线程 resetEvent.Set(); } }
请注意,在使用等待机制时,务必确保正确处理异常,以避免死锁和其他同步问题。