【发布时间】:2019-08-09 15:34:18
【问题描述】:
我的第一个项目是使用 asp.net core 和 razor pages 开始的。 在客户端请求时,将启动长时间运行的数据库操作。 现在我想识别,当用户离开网站时,可以取消数据库操作。
我用cancellationToken尝试过,但它永远不会被取消。
public async Task<JsonResult> OnPostReadAsync([DataSourceRequest] DataSourceRequest request, CancellationToken cancellationToken)
{
var messages = await _logMessageService.GetLogMessagesAsync(request, cancellationToken);
return new JsonResult(messages.ToDataSourceResult(request));
}
函数被 Telerik Kendo UI Grid 调用。 你能告诉我,为什么取消令牌没有被取消,或者我必须有哪些其他选项来检测客户的流产?
编辑 1
我将 Token 传递给 NpgsqlCommand 的这个函数调用:
var dataReader = await command.ExecuteReaderAsync(cancellationToken);
【问题讨论】:
-
AFAIK 只能处理停止/刷新,见andrewlock.net/…
-
您是否尝试过使用
HttpContext.RequestAborted取消令牌?像这样:var messages = await _logMessageService.GetLogMessagesAsync(request, HttpContext.RequestAborted); -
看不到你的日志消息服务是不可能的。取消令牌并不神奇,在某处有代码实际检查令牌状态并在取消时中止。简单地将它传递给一个方法并不能实现任何效果,除非它在工作期间被该方法实际使用。
-
嘿,克里斯,我将令牌传递给 NpgsqlCommand 并调用函数 ExecuteReader。
-
嘿 Rufo 和 Alberto,正如在 Rufos 链接中提到的那样,我的取消令牌参数将自动绑定到 HttpContext.RequestAborted 令牌。所以这也不会被取消。
标签: c# asp.net-core razor-pages cancellation-token