Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 超时反转_C#_Asp.net Mvc_Async Await_Task - Fatal编程技术网

C# 超时反转

C# 超时反转,c#,asp.net-mvc,async-await,task,C#,Asp.net Mvc,Async Await,Task,我需要将一个API与一个名为“超时反转”(TOR)的特定场景集成到我的开发中 简而言之,这意味着要遵守以下要求: 通过调用端点来启动请求 如果在规定的超时时间内未收到响应 通过调用另一个端点启动撤销请求 虽然需求对我来说似乎非常清楚,但我还没有找到通过使用任务来实现它的方法 例如,我知道如何延迟任务,但我真的不知道如何为已启动的任务设置以秒为单位的超时 有什么建议吗?您可以很容易地实现如下超时: public async Task TimoutReversal() { var tim

我需要将一个API与一个名为“超时反转”(TOR)的特定场景集成到我的开发中

简而言之,这意味着要遵守以下要求:

  • 通过调用端点来启动请求
  • 如果在规定的超时时间内未收到响应
  • 通过调用另一个端点启动撤销请求
虽然需求对我来说似乎非常清楚,但我还没有找到通过使用任务来实现它的方法

例如,我知道如何延迟任务,但我真的不知道如何为已启动的任务设置以秒为单位的超时


有什么建议吗?

您可以很容易地实现如下超时:

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
调用