我正在运行这样的非异步/等待代码
Startup
我已经看到了使用取消令牌来取消请求的示例,如果我的CallApi方法花费了10秒钟以上才能完成,是否可以取消整个请求并记录一些输出?我找不到设置了特定超时的示例
答案 0 :(得分:1)
取消是合作的。取消“无法取消”的操作非常尴尬。
如果CallApi
取CancellationToken
,则可以使用CancellationTokenSource
构造一个在给定时间后取消的数字。
如果CallApi
不使用CancellationToken
而是对基于HANDLE
的某种对象进行操作,则可以尝试通过关闭基础HANDLE
来取消。这是取消操作的一种常见(但不是通用)方法,否则该操作将无法取消。
否则,CallApi
是无法取消的操作,这意味着您正在查看一些尴尬的代码。
取消取消操作的最可靠方法是将代码放在单独的进程中,并在取消时终止该进程。
但是,由于您已经在ASP.NET上,因此您还可以查看将代码放置在单独的AppDomain或线程中,并卸载AppDomain /在取消时终止线程。随着时间的流逝,这将导致进程不稳定,但是ASP.NET将定期回收您的进程,因此它(最终)应该可以恢复。