csharp 封装一个五秒超时的函数
时间: 2023-12-07 12:02:52 浏览: 42
您可以使用 C# 中的 Task 和 CancellationToken 来实现一个五秒超时的函数。下面是一个示例代码:
```csharp
using System.Threading;
using System.Threading.Tasks;
public static async Task<T> TimeoutAfter<T>(this Task<T> task, int millisecondsTimeout)
{
var timeoutCancellationTokenSource = new CancellationTokenSource();
var completedTask = await Task.WhenAny(task, Task.Delay(millisecondsTimeout, timeoutCancellationTokenSource.Token));
if (completedTask == task)
{
timeoutCancellationTokenSource.Cancel();
return await task;
}
else
{
throw new TimeoutException("The operation has timed out.");
}
}
```
您可以将需要超时的任务传递给 `TimeoutAfter` 函数,并指定超时时间(以毫秒为单位)。如果任务在超时时间内完成,则返回任务结果。如果任务在超时时间内未完成,则抛出 `TimeoutException` 异常。例如:
```csharp
async Task<string> MyTask()
{
await Task.Delay(6000); // 模拟需要 6 秒才能完成的任务
return "Task completed!";
}
// 超时时间为 5 秒
var result = await MyTask().TimeoutAfter(5000); // 抛出 TimeoutException 异常
```