C# 取消呼叫';HttpClient.SendAsync()';

C# 取消呼叫';HttpClient.SendAsync()';,c#,.net,dotnet-httpclient,cancellation,C#,.net,Dotnet Httpclient,Cancellation,是否可以取消对HttpClient.SendAsync()的调用 我发送的数据如下: var requestMessage = new HttpRequestMessage(HttpMethod.Post, "some url"); var multipartFormDataContent = new MultipartFormDataContent(); // ... construction of the MultipartFormDataContent. It contains form

是否可以取消对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);
这段代码工作得很好,但我需要能够根据用户的要求取消一个请求。这可能吗


我看到有一个接受
CancellationToken
的服务器,但我不知道如何使用它。我还知道一个名为
IsCancellationRequested
的属性,它指示请求是否已取消。但是我如何实际取消请求呢?

SendAsync方法支持取消。您可以使用重载,该重载使用
取消令牌
,您可以随时取消该令牌

为此,您需要使用
CancellationTokenSource
类。下面的代码显示了如何执行此操作

CancellationTokenSource tokenSource = new CancellationTokenSource();
...
var response = await client.SendAsync(requestMessage, tokenSource.Token)
    .ConfigureAwait(false);
如果要取消请求,请调用
tokenSource.cancel()就完成了

重要:不能保证取消
CancellationTokenSource
将取消基础操作。它取决于底层操作的实现(在本例中为
SendAsync
方法)。该操作可能会在几秒钟后立即取消,也可能永远不会取消

值得注意的是,这是您取消任何支持
CancellationToken
的方法的方式。它可以与任何实现一起使用,而不仅仅是您所问的
SendAsync
方法

有关更多信息,请参阅