我有一个DotNet Core2.2API端点,它接受CancellationToken并在处理过程中定期检查它。当我从角7前端调用端点时,然后取消请求(取消订阅),取消令牌不会反映取消状态。为了正确地取消令牌,我是否遗漏了一个步骤?或者这不是现在的请求取消过程有效吗?
请注意,我可以看到初始请求火,api正在工作,以及请求取消(通过Chrome网络选项卡)。
角7
private sub: Subscription;
doWork(): void {
// calls to http client, sending a POST
this.sub = this.service.doWork([1,2,3,4]).subscribe();
}
cancelWork(): void {
if(this.sub && !this.sub.closed) {
this.sub.unsubscribe();
}
}API
[HttpPost("DoWork")]
public async Task<ActionResult<HttpResponseMessage>> DoWork([FromBody] List<int> ids, CancellationToken cancellationToken)
{
foreach(var id in ids)
{
// ---> cancellationToken.IsCancellationRequested is always false <-------
cancellationToken.ThrowIfCancellationRequested();
await doLongRunningTask(id);
}
}发布于 2020-02-18 22:32:13
如果请求在评估这一行时被取消,那么cancellationToken.ThrowIfCancellationRequested();就会抛出,因此在您的情况下它就不能工作了。通常,一些异步实用程序提供了用于传递它们将在内部使用的令牌的APIs。
https://stackoverflow.com/questions/60289605
复制相似问题