【发布时间】:2018-05-04 07:50:58
【问题描述】:
using (var httpClient = new HttpClient(filter))
{
using (var httpContent = new HttpStringContent(postBody, UnicodeEncoding.Utf8, content_type))
{
var source = new CancellationTokenSource(150000);
HttpResponseMessage result;
try
{
result = await httpClient.PostAsync(new Uri(url), httpContent).AsTask(source.Token, new Progress<HttpProgress>(
progress =>
{
Debug.WriteLine("Progress");
}));
}
catch (TaskCanceledException e)
{
return new ServerRequestResponse(RequestResponseType.Timeout);
}
catch (Exception e)
{
return new ServerRequestResponse(RequestResponseType.Failure);
}
var buffer = await result.Content.ReadAsBufferAsync();
var byteArray = buffer.ToArray();
var responseString = Encoding.UTF8.GetString(byteArray, 0, byteArray.Length);
return new ServerRequestResponse(RequestResponseType.Success, responseString);
}
}
上面的代码调用一个帖子到服务器并且有一个超时。我需要做的是在收到 Progress 调用后重新启动内部超时计数器。我需要它来检测传输是否仍在进行或已停止,因为有时在慢速连接上它可能会比超时持续时间更长。
是否有这样的功能,或者我需要实现自己的计时器才能手动重新启动它?
【问题讨论】:
标签: c# uwp timeout httprequest cancellationtokensource