class MyHostedService : IHostedService
{
public Task StartAsync(CancellationToken cancellationToken)
{
var cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
cts.CancelAfter(1000); // for example
await someService.DoAsync(cts.Token);
}
public Task StopAsync(CancellationToken cancellationToken)
{
var cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
cts.CancelAfter(1000); // for example
await anotherService.DoAsync(cts.Token);
}
}
2条答案
按热度按时间jchrr9hc1#
库的内部实现是否为我提供了取消令牌源,还是我需要创建自己的令牌源?
不,您不会得到
CancellationTokenSource
,只有CancelationToken
的StartAsync
/StopAsync
方法(以支持正常关闭/中断,一些文档)。如果需要取消调用某些服务,您还需要通过
CancellationTokenSource.CreateLinkedTokenSource
创建自己的CancellationTokenSource
。如果您没有自定义取消逻辑,则使用传递的
cancellationToken
就足够了。还可以考虑使用
BackgroundService
基类,它封装了一些常用的托管服务样板代码。qyzbxkaa2#
如果您使用
AddHostedService<T>
扩展方法添加服务,那么它将被提供一个停止令牌,如果/当主机被正常终止时,该令牌将被取消。如果出于某种原因,您通过其他一些手动方法(例如测试)调用服务,那么您可能希望为它提供一个取消令牌。
https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.servicecollectionhostedserviceextensions.addhostedservice