我正在尝试使用C#作为便携式dll为UWP应用程序开发一个http代理服务器。但是,重试超时是60秒,与发送的请求数无关,比如发送4个请求,但是如果必须重试我必须等待60秒才能执行少量任务。有什么方法可以自动执行此重试超时,以便根据请求的数量使用最佳超时,也许可以使用全局声明的内容并在sendasync(用于发送请求)?
答案 0 :(得分:0)
在UWP中,我们可以使用两个HttpClient
来发送HTTP请求。它们是System.Net.Http.HttpClient和Windows.Web.Http.HttpClient。我不确定你使用的是哪一个。
对于System.Net.Http.HttpClient,有两种方法可以设置超时。要为从该客户端发出的所有请求设置超时,我们可以使用HttpClient.Timeout属性:
var myClient = new System.Net.Http.HttpClient();
myClient.Timeout = TimeSpan.FromSeconds(30);
要在单个请求上设置超时,请使用取消令牌模式:
var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromSeconds(30));
var httpClient = new System.Net.Http.HttpClient();
var resourceUri = new Uri("http://www.contoso.com");
try
{
HttpResponseMessage response = await httpClient.GetAsync(resourceUri, cts.Token);
}
catch (TaskCanceledException ex)
{
// Handle request being canceled due to timeout.
}
catch (HttpRequestException ex)
{
// Handle other possible exceptions.
}
对于Windows.Web.Http.HttpClient,Windows.Web.Http.HttpClient类型没有超时属性。因此,您必须使用上面显示的取消令牌模式。
var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromSeconds(30));
var httpClient = new Windows.Web.Http.HttpClient();
var resourceUri = new Uri("http://www.contoso.com");
try
{
var response = await httpClient.GetAsync(resourceUri).AsTask(cts.Token);
}
catch (TaskCanceledException ex)
{
// Handle request being canceled due to timeout.
}
catch (Exception ex)
{
// Handle other possible exceptions.
}
有关详细信息,请参阅Demystifying HttpClient APIs in the Universal Windows Platform。