是否可以取消对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
的SendAsync
过载,但我不知道如何使用它。我还知道一个名为 IsCancellationRequested
的属性,它指示请求是否已被取消。但是,如何实际取消请求呢?
SendAsync
方法支持取消。您可以使用需要CancellationToken
的重载,可以随时取消。
为此,您需要使用 CancellationTokenSource
类。以下代码演示如何执行此操作。
CancellationTokenSource tokenSource = new CancellationTokenSource();
...
var response = await client.SendAsync(requestMessage, tokenSource.Token)
.ConfigureAwait(false);
当您想要取消请求时,请拨打tokenSource.Cancel();
,您就完成了。
重要事项: 不能保证取消CancellationTokenSource
将取消基础操作。它取决于基础操作的实现(在本例中为 SendAsync
方法)。该操作可以立即取消,几秒钟后取消,或者永远不会取消。
值得注意的是,这就是您取消任何支持CancellationToken
的方法的方式。它将适用于任何实现,而不仅仅是您问题主题的SendAsync
方法。
有关详细信息,请参阅托管线程中的取消