在
C#
中,我们可以使用CancellationToken
和Task.Delay
方法实现对方法执行时间的限制。下面给出一个基于Task
的方法执行超时时间的示例:
public static async Task<T> RunWithTimeout<T>(Func<T> function, TimeSpan timeout)
{
var cts = new CancellationTokenSource();
var delayTask = Task.Delay(timeout, cts.Token);
var functionTask = Task.Run(function, cts.Token);
if (await Task.WhenAny(functionTask, delayTask) == functionTask)
{
cts.Cancel();
return await functionTask;
}
throw new TimeoutException("操作超时!");
}
在上述代码中,我们定义了一个名为
RunWithTimeout
的静态泛型方法,该方法接收两个参数:一个待执行的Func<T>
类型的委托以及一个超时时间TimeSpan
。该方法返回一个Task<T>
对象,表示执行结果。
在方法内部,我们创建了