我試圖爲我的HttpClient調用設置一個默認的超時時間爲5秒。HttpClient取消不殺死底層的TCP通話
我已通過CancellationTokenSource
完成了此操作。
這裏的代碼的相關位:
var cancellationToken = new CancellationTokenSource();
cancellationToken.CancelAfter(TimeSpan.FromSeconds(5));
var result = _httpClient.SendAsync(request, cancellationToken.Token);
工程,我預計在調用代碼得到一個方面「任務被取消」的錯誤(我在.NET 4.7的控制檯應用程序進行測試),但我在提琴手注意到請求仍在運行1分鐘,直到它最終還是放棄了:
有人能解釋這種現象?
我希望在取消觸發時,底層請求也會被取消。
_httpClient
被實例化,如:new HttpClient { BaseAddress = baseAddress }
我知道有在該Timeout
設置,但不知道我是否應該使用或取消標記?我的猜測是Timeout
是針對非異步/等待的情況?
HTTP 1.1中沒有「取消此請求」操作,除了拆除整個連接外 - 我猜測HttpClient不支持Keepalive /連接重用。 –
@Damien_The_Unbeliever啊......當然......完全忘了'Keep-Alive'。順便說一句,你可以在HTTP客戶端中將Keep-Alive設置爲false(默認值爲true,因爲很好理由) – RPM1984
@Damien_The_Unbeliever,但是已經說過 - 如果我們不能取消底層的_request_(不是連接,而是_request_)那麼取消令牌的意義何在?只是讓客戶端(瀏覽器,或在我的示例控制檯應用程序)不關心結果了? (但請求可能仍然在後臺運行) – RPM1984