有没有办法取消后台任务HostingEnvironment.QueueBackgroundWorkItem
?
有CancellationToken
它会通知任务是否被取消,但我该怎么做?
参考https://msdn.microsoft.com/en-us/library/dd997396(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/dd997396(v=vs.110).aspx
成功取消涉及请求代码调用 CancellationTokenSource.Cancel 方法
好的。我在哪里可以访问CancellationTokenSource
?
经过几次尝试我想出了解决方案:
HostingEnvironment.QueueBackgroundWorkItem(ct =>
{
var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(ct);
var cancellationToken = linkedTokenSource.Token;
return Task.Factory.StartNew(() =>
{
// do stuff on background
}, cancellationToken);
});
Update:
事实上,任务是不需要的。感谢斯维克提出这一点。
这是没有任务的更详细的代码示例。
HostingEnvironment.QueueBackgroundWorkItem(ct =>
{
var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(ct);
// following is a dummy method, but you get the idea.
// StoreCancellationTokenSourceSoItCanBeUsedSomewhereElse(linkedTokenSource);
var cancellationToken = linkedTokenSource.Token;
try
{
while(true)
{
cancellationToken.ThrowIfCancellationRequested();
// do bg stuff
}
}
catch (OperationCanceledException ex)
{
// either token is in cancelled state
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)