2017-03-25 9 views
0

タイムアウト逆転

これは、次の要件を満たすために、succintly、意味:

  • 別のエンドポイント
を呼び出すことによって、反転要求を開始
  • アウト定義された時間内に応答が受信されない場合、エンドポイント
  • を呼び出すことによって要求を開始

    要件はわかりますが、タスクを使用して実装する方法は実際には見つかりませんでした。

    は例えば、私は、タスクを遅らせる方法を知っているが、私は本当にいけない開始タスク

    任意の提案のために数秒でタイムアウトを設定する方法を知っていますか?

  • 答えて

    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

    別のオプションは、HttpClientTimeSpanから作成CancellationTokenSourceからTokenを渡すことですコール。