C# 等待条件为真

作者:编程家 分类: c++ 时间:2025-09-03

使用C#编程语言时,有时候我们需要等待特定的条件变为真才能继续执行后续的操作。这种情况下,我们可以使用一些技术来实现条件等待。本文将介绍一些常用的C#等待条件为真的方法,并提供相关的代码示例。

使用Task.Delay等待一段时间

有时候我们只需要等待一段时间,而不是等待某个具体的条件。这时候可以使用Task.Delay方法来实现等待。Task.Delay方法是一个异步方法,它可以让当前线程等待指定的时间后继续执行。

下面是一个简单的示例代码,演示了如何使用Task.Delay来等待一段时间后输出一条消息:

csharp

using System;

using System.Threading.Tasks;

class Program

{

static async Task Main(string[] args)

{

Console.WriteLine("开始执行");

await Task.Delay(3000); // 等待3秒

Console.WriteLine("等待结束,继续执行");

}

}

在这个示例中,我们使用async和await关键字来声明Main方法是一个异步方法。然后,我们调用Task.Delay(3000)来等待3秒,最后再输出一条消息。

使用ManualResetEvent等待手动设置的信号

有时候我们需要等待一个手动设置的信号,这时候可以使用ManualResetEvent类来实现。ManualResetEvent是一个线程同步的类,它提供了一个信号标志,可以通过Set方法设置为真,通过Reset方法设置为假。

下面是一个示例代码,演示了如何使用ManualResetEvent来等待手动设置的信号:

csharp

using System;

using System.Threading;

class Program

{

static ManualResetEvent signal = new ManualResetEvent(false);

static void Main(string[] args)

{

Console.WriteLine("开始执行");

Thread thread = new Thread(DoWork);

thread.Start();

Console.WriteLine("等待信号");

signal.WaitOne(); // 等待信号

Console.WriteLine("收到信号,继续执行");

}

static void DoWork()

{

Console.WriteLine("正在执行工作");

Thread.Sleep(3000); // 模拟工作时间

Console.WriteLine("工作完成");

signal.Set(); // 发送信号

}

}

在这个示例中,我们创建了一个ManualResetEvent对象signal,并将其初始值设置为假。然后,我们创建一个新的线程并启动,新线程会执行DoWork方法。

DoWork方法模拟了一段工作时间,然后通过signal.Set()方法发送了一个信号。在主线程中,我们调用signal.WaitOne()来等待信号,当收到信号后才继续执行后续的操作。

使用TaskCompletionSource等待异步操作完成

有时候我们需要等待一个异步操作完成,这时候可以使用TaskCompletionSource类来实现。TaskCompletionSource是一个用于创建Task的类,它可以手动设置Task的完成状态。

下面是一个示例代码,演示了如何使用TaskCompletionSource来等待一个异步操作完成:

csharp

using System;

using System.Threading.Tasks;

class Program

{

static TaskCompletionSource tcs = new TaskCompletionSource();

static async Task Main(string[] args)

{

Console.WriteLine("开始执行");

Task task = DoWorkAsync();

await task;

Console.WriteLine("异步操作完成,继续执行");

}

static async Task DoWorkAsync()

{

Console.WriteLine("正在执行异步操作");

await Task.Delay(3000); // 模拟异步操作

Console.WriteLine("异步操作完成");

tcs.SetResult(true); // 设置Task完成状态

}

}

在这个示例中,我们创建了一个TaskCompletionSource对象tcs,并用于创建一个Task对象task。然后,我们调用DoWorkAsync方法来执行异步操作,在异步操作完成后调用tcs.SetResult方法来设置Task的完成状态。

在Main方法中,我们使用await来等待task完成,当异步操作完成后才会继续执行后续的操作。

本文介绍了使用C#等待条件为真的几种常用方法,并提供了相关的代码示例。通过使用Task.Delay、ManualResetEvent和TaskCompletionSource等技术,我们可以轻松地实现条件等待的功能。根据具体的需求,选择合适的方法来等待条件变为真,可以让我们的程序更加高效和可靠。