在实现IHostedService时,可以考虑使用CancellationTokenSource来控制任务的取消。通过在StartAsync方法中创建CancellationTokenSource,并在StopAsync方法中取消该源,可以确保任务在需要时得到正确的取消。
示例代码:
public class MyService : IHostedService
{
private readonly CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource();
public Task StartAsync(CancellationToken cancellationToken)
{
// Use our own CancellationTokenSource so we can guarantee our task will be cancelled if desired
var task = DoWork(_cancellationTokenSource.Token);
return Task.CompletedTask;
}
public async Task StopAsync(CancellationToken cancellationToken)
{
// Cancel our CancellationTokenSource, which will in turn cancel our task
_cancellationTokenSource.Cancel();
await Task.CompletedTask;
}
private async Task DoWork(CancellationToken cancellationToken)
{
while (!cancellationToken.IsCancellationRequested)
{
// Perform work here
await Task.Delay(TimeSpan.FromSeconds(10), cancellationToken);
}
}
}