Windows.Web.Http.HttpClient 超时选项

6
1个回答

13

你可以使用CancellationTokenSource来设置超时。

        HttpClient client = new HttpClient();
        var cancellationTokenSource = new CancellationTokenSource(2000); //timeout
        try
        {
            var response = await client.GetAsync("https://test.example.com", cancellationTokenSource.Token);
        }
        catch (TaskCanceledException ex)
        {

        }

编辑: 对于Windows.Web.Http.HttpClient,您应该使用AsTask()扩展方法:

HttpClient client = new HttpClient();
System.Threading.CancellationTokenSource source = new System.Threading.CancellationTokenSource(2000);
try
{
    client.GetAsync(new Uri("http://example.com")).AsTask(source.Token);
}
catch(TaskCanceledException ex)
{

}

抱歉,上面的示例是使用System.Net.Http.HttpClient编写的。如果您需要坚持使用Windows.Web.HttpClient,则可以查看http://msdn.microsoft.com/en-us/library/windows/apps/windows.web.http.filters.aspx。 - Cyprien Autexier
在“Windows.Web.Http.HttpClient” CancellationTokenSource中提供了相同的实现。 - Pradeep devendran
真的吗?因为GetAsync需要一个HttpCompletionOption,我无法传递一个Token。 - Naning
Windows.Web.Http.HttpClient是WinRT类,返回的IAsyncOperation不是一个Task。这不应该是什么大问题,因为你有AsTask扩展方法。(我的初始答案已经更新了示例)。 - Cyprien Autexier

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