gpt4 book ai didi

c# - 取消对 'HttpClient.SendAsync()' 的调用

转载 作者:行者123 更新时间:2023-11-30 13:30:43 25 4
gpt4 key购买 nike

是否可以取消对 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);

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

我看到有一个 overload of SendAsync接受 CancellationToken 但我不知道如何使用它。我还知道一个名为 IsCancellationRequested 的属性,它指示请求是否已被取消。但是我该如何真正取消请求呢?

最佳答案

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

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

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

当你想取消请求时,调用 tokenSource.Cancel(); 就完成了。

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

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

有关详细信息,请参阅 Cancellation in Managed Threads

关于c# - 取消对 'HttpClient.SendAsync()' 的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29586743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com