取消呼叫'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);

这段代码运行良好,但我需要能够根据用户需求取消请求。这可能吗?

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

SendAsync 方法支持取消。您可以使用需要CancellationToken的重载,可以随时取消。

为此,您需要使用 CancellationTokenSource 类。以下代码演示如何执行此操作。

CancellationTokenSource tokenSource = new CancellationTokenSource();
...
var response = await client.SendAsync(requestMessage, tokenSource.Token)
    .ConfigureAwait(false);

当您想要取消请求时,请拨打tokenSource.Cancel();,您就完成了。

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

值得注意的是,这就是您取消任何支持CancellationToken的方法的方式。它将适用于任何实现,而不仅仅是您问题主题的SendAsync方法。

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

最新更新