【发布时间】:2019-06-07 01:47:29
【问题描述】:
我正在向 WebApi 发出如下请求:
var response = client.PostAsJsonAsync(url, dto).Result;
我在控制器操作中使用HostingEnvironment,因此我可以在后台线程中完成工作,并将 IIS 的取消令牌传递给我的服务方法,如下所示:
public IHttpActionResult MyAction(SearchDto dto)
{
HostingEnvironment.QueueBackgroundWorkItem(async ct =>
{
//Do background work
var result = await myService.DoWorkAsync(dto, ct);
});
return Ok();
}
现在我想从客户端传递一个取消令牌,以便用户可以取消请求,所以我创建了一个CancellationTokenSource 并在客户端上进行了以下更改:
var response = client.PostAsJsonAsync(url, dto, cts.Token).Result;
以及对动作的改变:
public IHttpActionResult MyAction(SearchDto dto, CancellationToken ct)
{
HostingEnvironment.QueueBackgroundWorkItem(async ct =>
{
//Do background work
var result = await myService.DoWorkAsync(dto, ct);
});
return Ok();
}
我的问题是:
HostingEnvironment.QueueBackgroundWorkItem(async ct =>
如果我需要使用ct我传递给动作,我将如何使用IIS需要传递给后台线程的ct?
【问题讨论】:
-
不确定这是否可行。一旦令牌被发送到服务器并且用户取消它,那么服务器将不会被通知吗?
标签: c# asp.net-web-api async-await asp.net-web-api2