max*_*ego 6 asp.net async-await cancellation-token
有没有办法取消后台任务 HostingEnvironment.QueueBackgroundWorkItem?
有CancellationToken哪个通知任务是否被取消,但我该怎么做?参考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);
});
Run Code Online (Sandbox Code Playgroud)
更新:
确实,任务是不需要的。感谢斯维克提出这个问题。这是没有任务的更详细的代码示例。
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
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3603 次 |
| 最近记录: |