c# wait 如何正确使用
导读:在C#中,"wait"关键字通常与线程同步相关,如等待一个任务完成或等待某个条件成立。以下是一些关于如何在C#中正确使用"wait"关键字的示例: 使用Thread.Wait( : using System; using System....
在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();
}
}
请注意,在使用等待机制时,务必确保正确处理异常,以避免死锁和其他同步问题。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: c# wait 如何正确使用
本文地址: https://pptw.com/jishu/709405.html