超时逆转

时间:2017-03-25 00:33:05

标签: c# asp.net-mvc async-await task

我需要通过一个名为“Time Out Reversal”(TOR)的特定场景将API集成到我的开发中

这意味着,无疑要遵守以下要求:

  • 通过调用端点
  • 发起请求
  • 如果在规定的时间内未收到回复
  • 通过调用另一个端点
  • 启动反转请求

虽然这些要求对我来说非常清楚,但我确实找不到使用任务来实现它的方法。

例如,我知道如何延迟任务但我真的不知道如何设置启动任务的超时秒数

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以轻松实现超时:

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);
    }
}

另见SO上的受保护答案:Task with timeout

另一个选择是将TokenCancellationTokenSource创建的TimeSpan传递给HttpClient来电。