在一定时间后强制取消HostingEnvironment.QueueBackgroundWorkItem

时间:2019-04-09 20:39:14

标签: c# asp.net background-process cancellation-token

我正在运行这样的非异步/等待代码

Startup

我已经看到了使用取消令牌来取消请求的示例,如果我的CallApi方法花费了10秒钟以上才能完成,是否可以取消整个请求并记录一些输出?我找不到设置了特定超时的示例

1 个答案:

答案 0 :(得分:1)

取消是合作的。取消“无法取消”的操作非常尴尬。

如果CallApiCancellationToken,则可以使用CancellationTokenSource构造一个在给定时间后取消的数字。

如果CallApi不使用CancellationToken而是对基于HANDLE的某种对象进行操作,则可以尝试通过关闭基础HANDLE来取消。这是取消操作的一种常见(但不是通用)方法,否则该操作将无法取消。

否则,CallApi是无法取消的操作,这意味着您正在查看一些尴尬的代码。

取消取消操作的最可靠方法是将代码放在单独的进程中,并在取消时终止该进程。

但是,由于您已经在ASP.NET上,因此您还可以查看将代码放置在单独的AppDomain或线程中,并卸载AppDomain /在取消时终止线程。随着时间的流逝,这将导致进程不稳定,但是ASP.NET将定期回收您的进程,因此它(最终)应该可以恢复。