Nic*_*ick 4 asp.net asp.net-web-api owin cancellation-token
我的 web api 控制器中有以下方法(长时间运行的方法尊重取消令牌,即如果已请求取消,它们将不会运行):
public async Task<IHttpActionResult> ApiMethod(CancellationToken cancellationToken)
{
await LongRunningNetworkOperation1(cancellationToken);
await LongRunningNetworkOperation2(cancellationToken);
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
客户端有以下代码来调用我的 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.
}
}
Run Code Online (Sandbox Code Playgroud)
如果客户端的请求在调用“LongRunningNetworkOperation2”之前超时,则取消令牌会阻止“LongRunningNetworkOperation2”运行吗?换句话说,客户端可以通知 web api 停止运行某个请求吗?
客户端可以向 Web api 发出信号以停止运行某个请求吗?
理论上,是的。取消HttpClient应关闭底层 TCP/IP 连接。作为响应,ASP.NET 堆栈应检测其客户端的丢失,并取消 WebAPI CancellationToken。
在实践中,这取决于如何完成HttpClient和WebAPI实现是你正在使用。不一定保证取消,但我希望它至少适用于桌面HttpClient。
| 归档时间: |
|
| 查看次数: |
4944 次 |
| 最近记录: |