Мне нужно это, чтобы иметь возможность определить, происходит ли передача по-прежнему
Вы не можете определить, продолжается ли передача, и интерфейс IAsyncOperationWithProgress
предоставляет только обработчик событий Progress
. Вы можете обнаружить прогресс Stage
.
httpResponse = await httpClient.GetAsync(requestUri).AsTask(source.Token, new Progress<HttpProgress>((Progress) =>
{
Debug.WriteLine(Progress.BytesReceived.ToString() + "---" + Progress.Stage);
}));
Тем не менее, вы не можете идентифицировать прогресс, завершенный из вывода.
0------SendingHeaders
0------WaitingForResponse
0------ReceivingHeaders
0------ReceivingContent
65536------ReceivingContent
98304------ReceivingContent
98432------ReceivingContent
98432------ReceivingContent
Вы можете обнаружить прогресс только с HttpStatusCode
.
Что мне нужно сделать, так это перезапустить внутренний счетчик тайм-аута после получения вызова Progress.
Значение по умолчанию timeout равно 100 000 миллисекунд (100 секунд) в пределах httpclient.
Если вы запрашиваете данные более 100 секунд, вам нужно установить время ожидания вручную.
var cts = new CancellationTokenSource();
......
cts.CancelAfter(2000);