取消对’HttpClient.SendAsync()’的调用
是否可以取消对HttpClient.SendAsync()
的调用?
我发送的数据如下:
var requestMessage = new HttpRequestMessage(HttpMethod.Post, "some url"); var multipartFormDataContent = new MultipartFormDataContent(); // ... construction of the MultipartFormDataContent. It contains form data + picture file requestMessage.Content = multipartFormDataContent; var response = await client.SendAsync(requestMessage).ConfigureAwait(false);
此代码完美无缺,但我需要能够根据用户需求取消请求。 这可能吗?
我看到SendAsync
的重载接受了CancellationToken
但我不知道如何使用它。 我还知道一个名为IsCancellationRequested
的属性,它指示请求是否已被取消。 但是如何实际取消请求?
SendAsync
方法支持取消。 您可以使用带有CancellationToken
的重载,可以随时取消。
您需要使用CancellationTokenSource
类来实现此目的。 以下代码显示了如何执行此操作。
CancellationTokenSouce tokenSource = new CancellationTokenSouce(); ... var response = await client.SendAsync(requestMessage, tokenSource.Token) .ConfigureAwait(false);
如果要取消请求,请调用tokenSource.Cancel();
你已经完成了
重要提示 :无法保证取消CancellationTokenSource
将取消基础操作。 它取决于底层操作的实现(在本例中是SendAsync
方法)。 操作可以在几秒钟后立即取消,或者从不取消。
值得注意的是,这是您取消任何支持CancellationToken
方法的方法。 它适用于任何实现,而不仅仅是您问题的主题SendAsync
方法。
有关更多信息,请参阅托管线程中的取消