📅  最后修改于: 2023-12-03 15:13:49.800000             🧑  作者: Mango
在C#编程中,等待一定时间是非常常见的需求。例如,等待一段时间再重新尝试连接网络、等待用户输入或者是进行一些时间上的操作。本文将介绍在C#中如何等待指定的秒数。
最基本的等待方法是使用 Thread.Sleep
方法。该方法可以让当前线程挂起指定的时间。
Console.WriteLine("开始等待...");
Thread.Sleep(5000); // 等待5秒
Console.WriteLine("等待结束。");
在上例中,我们使用了 Sleep
方法使程序暂停了5秒,然后再输出 "等待结束"。
需要注意的是,使用 Sleep
方法会使整个线程暂停,因此应谨慎使用。
另一种等待方法是使用 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
方法。
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.Sleep
、Task.Delay
和使用 CancellationTokenSource
和 Task.Delay
。
我们可以根据实际情况选择不同的方法。需要注意的是,在使用 Sleep
方法时需要谨慎使用,以免导致整个线程暂停。