📅  最后修改于: 2023-12-03 15:13:46.207000             🧑  作者: Mango
在 C# 中,我们可以使用 Thread.Sleep()
方法来实现系统暂停的效果。这个方法会让当前线程暂停指定的时间,单位为毫秒。
// 等待 3 秒钟
Thread.Sleep(3000);
但是,使用 Thread.Sleep()
方法存在一些问题:
为了解决这些问题,我们可以使用更加高级的方式来实现系统暂停等效,其中包括使用 CancellationTokenSource
类、Task.Delay()
方法、异步编程等技术。
使用 CancellationTokenSource
类可以在暂停的同时,提供一种取消暂停的方式。这种方式适用于需要在长时间操作中间暂停的场景,比如网络请求、数据处理等等。
CancellationTokenSource cts = new CancellationTokenSource();
// 设定暂停时间为 3 秒钟
Task.Delay(3000, cts.Token).Wait();
// 实现取消暂停
cts.Cancel();
上述示例中,使用 CancellationTokenSource
类创建了一个取消令牌(cts.Token
),将其作为参数传递给 Task.Delay()
方法,实现了定时暂停的效果。如果需要取消暂停,可以调用 cts.Cancel()
方法。
在 C# 5.0 及更新版本中,我们可以使用 Task.Delay()
方法实现暂停等效,这个方法可以在暂停的同时,不占用当前线程,提高 CPU 资源利用率,同时也提供了取消暂停的方式。
CancellationTokenSource cts = new CancellationTokenSource();
// 设定暂停时间为 3 秒钟
await Task.Delay(3000, cts.Token);
// 实现取消暂停
cts.Cancel();
上述示例中,使用 Task.Delay()
方法实现了定时暂停的效果,并且使用 await
等待异步操作完成。如果需要取消暂停,可以调用 cts.Cancel()
方法。
在 C# 中,异步编程也可以用来实现系统暂停等效。使用异步编程可以更加方便的实现取消暂停、修改暂停时间等操作。
CancellationTokenSource cts = new CancellationTokenSource();
// 设定暂停时间为 3 秒钟
var tcs = new TaskCompletionSource<bool>(
TaskContinuationOptions.RunContinuationsAsynchronously);
_ = Task.Delay(3000, cts.Token).ContinueWith(t => {
tcs.SetResult(true);
}, CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.Default);
// 实现取消暂停
cts.Cancel();
await tcs.Task;
上述示例中,使用了 TaskCompletionSource
类来创建一个 Task
对象,并且使用 ContinueWith()
方法来实现定时暂停。如果需要取消暂停,可以调用 cts.Cancel()
方法。最后,使用 await
等待异步操作完成。
在 C# 中,实现系统暂停等效的方式有很多种,选择哪一种方式取决于具体的需求。可以根据需要选择 Thread.Sleep()
、CancellationToken
、Task.Delay()
、异步编程等方式来实现暂停等效,提高程序执行效率。