如何在Windows Phone 8.1/Windows 8.1中为HTTP客户端请求操作设置超时时间

16

如何将Timeout属性设置为Windows.Web.Http.HttpClient操作。我使用的代码示例如下。

public HttpClient httpClient;
public CancellationTokenSource cts;

public void SendRequest(addressUri,postrequestbody)
{
    HttpHelper.CreateHttpClient(ref httpClient);
    cts = new CancellationTokenSource();
    HttpRequestMessage msg = 
        new HttpRequestMessage(new HttpMethod("POST"), 
                               new Uri(addressUri));
    msg.Content = new HttpStringContent(postrequestbody);
    msg.Content.Headers.ContentType = 
        new HttpMediaTypeHeaderValue("application/json");
    HttpResponseMessage response = 
        await httpClient.SendRequestAsync(msg).AsTask();

    if (response.StatusCode == HttpStatusCode.Ok)
    {
    }
}
1个回答

23

使用 CancellationToken

try 
{
    CancellationTokenSource cts = new CancellationTokenSource(2000); // 2 seconds
    HttpClient client = new HttpClient();
    HttpResponseMessage response = await
        client.SendRequestAsync(request).AsTask(cts.Token);
}
catch (TaskCanceledException ex)
{
    // Catch operation aborted ...
}

你尝试过超时时间大于60秒吗?(你的例子使用了2秒)我尝试设置了10分钟,代码如下: var response = await httpClient.PutAsync(operation, payload, new CancellationTokenSource(600000).Token);但是仍然在60秒后返回404 NOT FOUND。 - iupchris10
1
@iupchris10 我知道可能已经晚了2年,但是60秒比10分钟少。如果你有一个响应代码(即服务器已经_响应_),那么你的请求就没有超时。我会_期望_这种行为,因为这是正确的行为。上面的代码将在10分钟后取消您的请求,如果没有响应/响应时间太长。但在你的例子中并非如此。 - ProgrammingLlama
1
我知道这是三年后的事情,但是应该是60万而不是6万,也就是10分钟。 - geedubb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接