的签名HostingEnvironment.QueueBackgroundWorkItem
是:
public static void QueueBackgroundWorkItem(Action<CancellationToken> workItem)
这意味着工作项可以访问CancellationToken
. 但我认为这对你的情况没有用。从文档中:
提供的 CancellationToken 将在应用程序关闭时发出信号。
如果要workItem
根据其他条件取消 ,可以使用CancellationToken
从CancellationTokenSource
. 例如,如果工作项未在 10 秒内启动,则取消它:
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10));
HostingEnvironment.QueueBackgroundWorkItem(_ =>
{
cts.Token.ThrowIfCancellationRequested();
// the code of the work item goes here
});
这在技术上仍然会启动工作项,即使CancellationToken
被取消,但它不会做任何事情。
请注意,取消始终是合作的。这意味着如果您有一个长时间运行的工作项,并且您想在其执行过程中取消它,您将需要CancellationToken
定期检查。