我的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.
}
}
如果客户的请求超过&#34; LongRunningNetworkOperation2&#34;被叫,将取消提示防止&#34; LongRunningNetworkOperation2&#34;从跑步?换句话说,客户端是否可以通知web api停止运行某个请求?
答案 0 :(得分:3)
客户端是否可以通知web api停止运行某个请求?
理论上,是的。取消HttpClient
应关闭底层TCP / IP连接。作为响应,ASP.NET堆栈应检测其客户端的丢失,并取消WebAPI CancellationToken
。
在实践中,这取决于您使用的HttpClient
和WebAPI
实施的完整程度。取消并非必须保证,但我希望它至少适用于桌面HttpClient
。