2016-04-13 6 views
2

私は私のウェブAPIコントローラ(キャンセルが要求されている場合、彼らは実行されませんつまり長時間実行されている方法は、キャンセルトークンを称える)で、次の方法があります:クライアントは私を呼び出すために、次のコードを持っているクライアントはWeb APIリクエストをキャンセルできますか?

public async Task<IHttpActionResult> ApiMethod(CancellationToken cancellationToken) 
{ 
    await LongRunningNetworkOperation1(cancellationToken); 
    await LongRunningNetworkOperation2(cancellationToken); 

    return Ok(); 
} 

をウェブAPIコントローラ:

using (var httpClient = new HttpClient()) 
{ 
    httpClient.Timeout = TimeSpan.FromMilliseconds(3000); 

    try 
    { 
     // Sending DELETE request 
     HttpResponseMessage deleteMessage = await httpClient. 
          DeleteAsync("http://localhost:80/api/apiMethod"); 
    } 
    catch (Exception e) 
    { 
     // Timeout occurred. 
    } 
} 

「LongRunningNetworkOperation2」が呼び出される前に、cancellationTokenが実行されているから、「LongRunningNetworkOperation2」を防ぐことができますアウトクライアントの要求の時間か?言い換えれば、クライアントはWeb APIに特定のリクエストの実行を停止するように通知できますか?

答えて

2

クライアントは、特定の要求の実行を停止するためのWeb APIを知らせることができますか?理論的には

、はい。 HttpClientを取り消すと、基本となるTCP/IP接続が切断されます。これに応じて、ASP.NETスタックはクライアントの損失を検出し、WebAPI CancellationTokenを取り消す必要があります。実際に

、それはHttpClientWebAPI実装はあなたが使用していることをどのように完全に依存します。キャンセルは必ずしもの保証付きではありませんが、少なくともデスクトップの場合はHttpClientで動作するはずです。

+0

この特定のキャンセル動作が文書化されている場所はどこですか? – Nick

+0

@ニック:asp.netのウェブサイト上での検索は現在行われていないため、実際に正式に文書化されているかどうかはわかりません。 –

関連する問題