C# 超时反转
我需要将一个API与一个名为“超时反转”(TOR)的特定场景集成到我的开发中 简而言之,这意味着要遵守以下要求:C# 超时反转,c#,asp.net-mvc,async-await,task,C#,Asp.net Mvc,Async Await,Task,我需要将一个API与一个名为“超时反转”(TOR)的特定场景集成到我的开发中 简而言之,这意味着要遵守以下要求: 通过调用端点来启动请求 如果在规定的超时时间内未收到响应 通过调用另一个端点启动撤销请求 虽然需求对我来说似乎非常清楚,但我还没有找到通过使用任务来实现它的方法 例如,我知道如何延迟任务,但我真的不知道如何为已启动的任务设置以秒为单位的超时 有什么建议吗?您可以很容易地实现如下超时: public async Task TimoutReversal() { var tim
- 通过调用端点来启动请求
- 如果在规定的超时时间内未收到响应
- 通过调用另一个端点启动撤销请求
有什么建议吗?您可以很容易地实现如下超时:
public async Task TimoutReversal() {
var timeout = TimeSpan.FromSeconds(10);
try {
//assumes HttpClient
Client.Timeout = timeout;
await Client.GetAsync(firstEndpoint);
} catch (OperationCanceledException ex) {
await Client.DeleteAsync(secondEndpoint);
}
}
//or
public async Task TimoutReversal() {
var timeout = TimeSpan.FromSeconds(10);
var firstTask = Client.GetAsync(firstEndpoint);
if (await Task.WhenAny(firstTask, Task.Delay(timeout)) == firstTask) {
//success
}else {
//failure
await Client.DeleteAsync(secondEndpoint);
}
}
另请参见此处的受保护答案,以便:
另一个选项是将从TimeSpan
创建的CancellationTokenSource
中的Token
传递给HttpClient
调用