取消对’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方法。

有关更多信息,请参阅托管线程中的取消