Тайм-аут веб-запроса или нет Task.WhenAny работаетC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Тайм-аут веб-запроса или нет Task.WhenAny работает

Сообщение Anonymous »

Код: Выделить всё

private Stream PostData(WebRequest request, byte[] rawByteData)
{
Stream req = request.GetRequestStream();
req.Write(rawByteData, 0, rawByteData.Length);

return req;
}

public WebRequestResult RequestPostDataWebRequestResult(string url, string postData, IEnumerable headers = null, string contentType = null, int timeout = 300)
{
WebRequestResult webRequestResult = new WebRequestResult();
try
{
byte[] rawByteData;
WebRequest request = PrepareWebRequest(url, postData, headers, out rawByteData, contentType, timeout:timeout);

Stream req = PostData(request, rawByteData);

var response = GetResponseStreamThrow(request);

req.Close();
webRequestResult.Message = response.Item1;
webRequestResult.StatusCode = response.Item2;
webRequestResult.Status = true;
return webRequestResult;
}
catch (Exception e)
{
webRequestResult.Message = e.ToString();
webRequestResult.Status = false;
if (e is WebException webException)
{
webRequestResult.WebExceptionStatus = webException.Status;
if (webException.Response is HttpWebResponse response)
{
webRequestResult.StatusCode = response.StatusCode;
}
}
return webRequestResult;
}
}
private async Task TaskWithTimeout(Task task, int duration)
{
if (duration == 0)
duration = 100 * 1000;
var retTask = await Task.WhenAny(task, Task.Delay(duration)).ConfigureAwait(false);

if (retTask is Task) return task.Result;
return null;
}
Несмотря на то, что мы задаем 100-секундный тайм-аут в Подготовка веб-запроса, HTTP-запросы выдают исключение System.IO.IOException: невозможно прочитать данные из транспортного соединения: попытка подключения не удалась, поскольку подключенная сторона этого не сделала. должным образом ответить через определенный период времени или установить соединение не удалось, потому что подключенный хост по какой-то причине не ответил по истечении 40 минут вместо того, чтобы выдать ошибку тайм-аута.
Этого не происходит. каждый раз происходит очень редко.
В GetResponseStreamThrow мы вызывали любой из них, но Task.Delay и WebRequest.Timeout не работали.

Код: Выделить всё

WebResponse ws = await TaskWithTimeout(request.GetResponseAsync(), request.Timeout).ConfigureAwait(false);

Код: Выделить всё

WebResponse ws = TaskWithTimeout(Task.Run(request.GetResponse), request.Timeout).Result;
Когда я проверяю запрос от скрипача, я вижу рукопожатие.
Это действительно ошибка .net, поскольку и WebRequest.Timeout, и Task.Delay для пользовательского тайм-аута, кажется, сделали это не сработало?
Есть ли лучший способ реализовать тайм-аут на стороне клиента, поскольку WebRequest.Timeout не работает для этого сценария?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ny-working
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Тайм-аут веб-запроса или нет Task.WhenAny работает
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Тайм-аут веб-запроса или нет Task.WhenAny работает
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Вызывает ли сбой тайм-аут сторожевого таймера или тайм-аут является результатом сбоя?
    Anonymous » » в форуме Linux
    0 Ответы
    159 Просмотры
    Последнее сообщение Anonymous
  • Тайм-аут вызова API и тайм-аут попытки вызова API dynamodb
    Anonymous » » в форуме JAVA
    0 Ответы
    123 Просмотры
    Последнее сообщение Anonymous
  • Почему вызов неоднозначен между Task.Run(Func) и Task.Run(Func) при передаче имени метода
    Anonymous » » в форуме C#
    0 Ответы
    100 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»