我的 Web api 控制器中有以下方法(长时间运行的方法支持取消令牌,即如果请求取消,它们将不会运行):
public async Task<IHttpActionResult> ApiMethod(CancellationToken cancellationToken)
{
await LongRunningNetworkOperation1(cancellationToken);
await LongRunningNetworkOperation2(cancellationToken);
return Ok();
}
客户端有以下代码来调用我的 Web api 控制器:
using (var httpClient = new HttpClient())
{
httpClient.Timeout = TimeSpan.FromMilliseconds(3000);
try
{
// Sending DELETE request
HttpResponseMessage deleteMessage = await httpClient.
DeleteAsync("http://localhost:80/api/apiMethod");
}
catch (Exception e)
{
// Timeout occurred.
}
}
如果在调用“LongRunningNetworkOperation2”之前客户端请求超时,cancellationToken 是否会阻止“LongRunningNetworkOperation2”运行?换句话说,客户端是否可以向 Web api 发送信号以停止运行某个请求?
客户端可以向 Web API 发送信号以停止运行某个请求吗?
理论上是的。取消HttpClient
应关闭底层 TCP/IP 连接。作为响应,ASP.NET 堆栈应该检测其客户端的丢失,并取消 WebAPICancellationToken
.
在实践中,这取决于完成程度HttpClient
and WebAPI
实现是您正在使用的。取消不一定是保证,但我希望它至少适用于桌面HttpClient
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)