C# 创建一个task 如果超时则执行后续方法
时间: 2024-10-23 20:14:58 浏览: 16
C#并行编程-Task
在C#中,你可以使用`Task` 和 `CancellationTokenSource` 来创建一个有超时限制的任务,并在超时时执行特定的操作。这里是一个简单的示例:
```csharp
using System;
using System.Threading.Tasks;
class Program
{
public static async Task Main()
{
CancellationTokenSource cts = new CancellationTokenSource();
// 设置任务的超时时间,单位是秒
TimeSpan timeout = TimeSpan.FromSeconds(5);
// 开始任务并提供取消操作
var task = Task.Run(() =>
{
try
{
// 这里是你的耗时操作
DoSomethingAsync(cts.Token);
}
catch (OperationCanceledException)
{
Console.WriteLine("Task was canceled due to the timeout.");
}
}, cts.Token);
// 等待任务完成,如果超过timeout,则取消任务
if (!await task.WithTimeout(timeout))
{
cts.Cancel();
await task; // 确保任务被正确取消
}
Console.WriteLine("Task finished or cancelled.");
}
private static async void DoSomethingAsync(CancellationToken cancellationToken)
{
// 模拟耗时操作
for (int i = 0; !cancellationToken.IsCancellationRequested && i < 100; i++)
{
await Task.Delay(100, cancellationToken);
Console.WriteLine($"Working... {i}");
}
if (!cancellationToken.IsCancellationRequested)
Console.WriteLine("Work completed.");
}
}
```
在这个例子中,`WithTimeout` 方法用于等待任务,如果在指定时间内任务没有完成,它会返回`false`,这时我们取消`CancellationTokenSource`来停止任务。然后通过`await task`确保任务会被正确地取消。
阅读全文