📜  c# wait seconds - C# (1)

📅  最后修改于: 2023-12-03 15:13:49.800000             🧑  作者: Mango

C# Wait Seconds

在C#编程中,等待一定时间是非常常见的需求。例如,等待一段时间再重新尝试连接网络、等待用户输入或者是进行一些时间上的操作。本文将介绍在C#中如何等待指定的秒数。

Thread.Sleep方法

最基本的等待方法是使用 Thread.Sleep 方法。该方法可以让当前线程挂起指定的时间。

Console.WriteLine("开始等待...");
Thread.Sleep(5000); // 等待5秒
Console.WriteLine("等待结束。");

在上例中,我们使用了 Sleep 方法使程序暂停了5秒,然后再输出 "等待结束"。

需要注意的是,使用 Sleep 方法会使整个线程暂停,因此应谨慎使用。

Task.Delay方法

另一种等待方法是使用 Task.Delay 方法。该方法返回一个 Task 对象,表示在指定的时间内延迟执行。

Console.WriteLine("开始等待...");
await Task.Delay(5000); // 等待5秒
Console.WriteLine("等待结束。");

在上例中,我们使用了 Delay 方法使程序暂停了5秒,然后再输出 "等待结束"。

需要注意的是,使用 Delay 方法不会导致整个线程暂停,而是只会暂停当前的异步方法。因此,如果您使用的是同步方法,则需要将其包装到 Task.Run 方法中。

Console.WriteLine("开始同步等待...");
Task.Run(() =>
{
    Thread.Sleep(5000);
}).Wait(); // 等待5秒

Console.WriteLine("同步等待结束。");

在上例中,我们将 Thread.Sleep 方法包装到了一个 Task.Run 方法中,然后使用 Wait 方法等待执行完毕。这样做可以防止整个线程暂停。

CancellationTokenSource和Task.Delay方法

如果需要在等待过程中能够取消操作,我们可以使用 CancellationTokenSourceTask.Delay 方法。

CancellationTokenSource cts = new CancellationTokenSource();
Console.WriteLine("开始等待...");
Task.Delay(5000, cts.Token).ContinueWith(t =>
{
    if (!t.IsCanceled)
    {
        Console.WriteLine("等待结束。");
    }
}, TaskScheduler.FromCurrentSynchronizationContext());

// 取消等待
cts.Cancel();

在上例中,我们使用 Task.Delay 方法并传入 CancellationToken,然后使用 ContinueWith 方法在等待结束后执行回调函数。然后我们使用 CancellationTokenSource 来取消等待。

总结

C#中等待指定秒数的方法有三种,分别是 Thread.SleepTask.Delay 和使用 CancellationTokenSourceTask.Delay

我们可以根据实际情况选择不同的方法。需要注意的是,在使用 Sleep 方法时需要谨慎使用,以免导致整个线程暂停。