取消c#httpClient GetStreamAsync调用

时间:2016-12-18 14:16:16

标签: c# httpclient

我需要在旧的c#项目中添加取消http请求的可能性。

该项目使用的HttpClient::GetStreamAsync似乎不支持取消令牌。

可以取消GetStreamAsync调用吗? 我还有其他什么可能性?

2 个答案:

答案 0 :(得分:5)

由于流的工作原理,因此无法取消。我在2012年撰写的MSDN博客文章中发现了另一种解决方案。它可能对您有所帮助。作者正在使用GetStringAsync,但该原则也适用于GetStreamAsync。文章:Await HttpClient.GetStringAsync() and cancellation

在MSDN文章中,作者正在使用GetAsync(...),其中可以获取取消参数。弥敦道问题的简单解决方案可能是这样的......

CancellationTokenSource cancellationSource = new CancellationTokenSource();
CancellationToken cancellationToken = cancellationSource.Token;

Uri uri = new Uri('some valid web address'); 
HttpClient client = new HttpClient();
await client.GetAsync(uri, cancellationToken);

// In another thread, you can request a cancellation.
cancellationSource.Cancel();

请注意,取消是在CancellationTokenSource对象上进行的,不是 CancellationToken对象。

答案 1 :(得分:0)

这是一个简单的例子。

public async Task<Stream> GetWebData(string url, CancellationToken? c = null)
{
    using (var httpClient = new HttpClient())
    {
        var t = httpClient.GetAsync(new Uri(url), c ?? CancellationToken.None);
        var r = await t;
        return await r.Content.ReadAsStreamAsync();
    }
}