📜  c sharp 系统暂停等效 - C# (1)

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

C# 系统暂停等效

在 C# 中,我们可以使用 Thread.Sleep() 方法来实现系统暂停的效果。这个方法会让当前线程暂停指定的时间,单位为毫秒。

// 等待 3 秒钟
Thread.Sleep(3000);

但是,使用 Thread.Sleep() 方法存在一些问题:

  • 它会占用当前线程,造成 CPU 资源的浪费;
  • 没有提供取消暂停或者修改暂停时间的方式,只能等待指定的时间结束。

为了解决这些问题,我们可以使用更加高级的方式来实现系统暂停等效,其中包括使用 CancellationTokenSource 类、Task.Delay() 方法、异步编程等技术。

使用 CancellationToken 实现暂停等效

使用 CancellationTokenSource 类可以在暂停的同时,提供一种取消暂停的方式。这种方式适用于需要在长时间操作中间暂停的场景,比如网络请求、数据处理等等。

CancellationTokenSource cts = new CancellationTokenSource();

// 设定暂停时间为 3 秒钟
Task.Delay(3000, cts.Token).Wait();

// 实现取消暂停
cts.Cancel();

上述示例中,使用 CancellationTokenSource 类创建了一个取消令牌(cts.Token),将其作为参数传递给 Task.Delay() 方法,实现了定时暂停的效果。如果需要取消暂停,可以调用 cts.Cancel() 方法。

使用 Task.Delay() 实现暂停等效

在 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()CancellationTokenTask.Delay()、异步编程等方式来实现暂停等效,提高程序执行效率。