.Net Core后台服务需注意Ioc的生命周期问题

业务很简单,站点启动后,用一个后台服务定时同步数据,写入SqlLite数据表

`private readonly IServiceProvider _service;

    public KlineStoryLoader(IServiceProvider service)
    {
        _service = service;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            await Task.Yield();
            try
            {
                using var scope = _service.CreateScope();
                var dataService = scope.ServiceProvider.GetService<IKlineStoryService>();
                await dataService.SyncDataAsync();
            }
            catch (System.Exception err)
            {
                Logger.WriteLog(LogLevel.Error, "同步异常", err);
            }
            await Task.Delay(1 * 1000);
        }
    }`


注意黑体部分,不使用这种方式,会导致SqlLite在被读取时,同步写入数据失败:

using var scope = _service.CreateScope();
var dataService = scope.ServiceProvider.GetService<IKlineStoryService>();
阅读 107

推荐阅读
李大伟_大不发音
用户专栏

喜欢音乐,喜欢真实,喜欢电影,喜欢篮球,喜欢自由自在Web开发,C#,JavaScript,SQL,MongoDB

0 人关注
5 篇文章
专栏主页