C#task.delay
时间: 2025-01-03 16:38:31 浏览: 10
### C# 中 `Task.Delay` 方法的使用
#### 基本概念
`Task.Delay` 是一种异步操作,允许程序暂停执行指定的时间间隔而不阻塞线程。这使得它可以有效地用于需要延迟的操作而不会影响应用程序的整体性能[^2]。
#### 参数说明
此方法接受两个主要参数:
- **时间长度**:表示要等待的时间量(以毫秒为单位),可以是一个整数值或 `TimeSpan` 对象。
- **取消令牌** (可选) :提供了一个机制来提前终止延时期间。如果提供了取消标记并触发了取消请求,则会抛出 `OperationCanceledException` 异常。
#### 返回值
调用 `Task.Delay` 后将获得一个代表该延迟操作的任务对象 (`Task`) 或者带有结果的任务(`Task<T>`), 当计时结束时这个任务就完成了。
#### 示例代码展示
下面是一些关于如何在不同场景下应用 `Task.Delay()` 的例子:
```csharp
using System;
using System.Threading;
using System.Threading.Tasks;
class Program {
static async Task Main(string[] args) {
Console.WriteLine("Starting delay...");
// 创建一个简单的三秒钟延迟
await Task.Delay(3000);
Console.WriteLine("Delay finished after 3 seconds.");
// 使用 TimeSpan 来定义更复杂的持续期
var duration = new TimeSpan(hours: 0, minutes: 0, seconds: 5);
await Task.Delay(duration);
Console.WriteLine("Another delay of 5 seconds has passed.");
// 结合 CancellationToken 实现可取消的延迟
var cts = new CancellationTokenSource();
try{
Console.WriteLine("Attempting a cancellable delay...");
await Task.Delay(TimeSpan.FromSeconds(10), cts.Token);
Console.WriteLine("This message won't appear if cancellation occurs");
}
catch(OperationCanceledException){
Console.WriteLine("The delay was cancelled!");
}
// 取消正在运行中的延迟
cts.Cancel();
// 处理多个并发延迟
var delays = Enumerable.Range(1, 4).Select(i => Task.Delay(i * 1000));
await Task.WhenAll(delays); // 等待所有延迟完成
Console.WriteLine("All concurrent delays have completed.");
}
}
```
阅读全文