之前介绍了Polly,里面也有一个Timeout的策略,但是我还是按捺不住整了一个方法出来。
【名词解释】整:网上找
#region 超时策略
// 有返回值 public async Task<TResult> TimeoutAfter<TResult>(Task<TResult> task, TimeSpan timeout) { using (var token = new CancellationTokenSource()) { var completedTask = await Task.WhenAny(task, Task.Delay(timeout, token.Token)); if (completedTask == task) { token.Cancel(); return await task; } else { throw new TimeoutException("方法执行超时"); } } }
// 无返回值 public async Task TimeoutAfter(Task task, TimeSpan timeout) { using (var token = new CancellationTokenSource()) { var completedTask = await Task.WhenAny(task, Task.Delay(timeout, token.Token)); if (completedTask == task) { token.Cancel(); await task; } else { throw new TimeoutException("方法执行超时"); } } } #endregion
|