缓存初始化的阻止列表

时间:2017-12-27 12:00:52

标签: .net async-await locking .net-core

我有IHostedService实现,它每10秒从网上读取一次构建缓存的文件。

protected override async Task ExecuteAsync(CancellationToken cancellationToken)
{
  while (!cancellationToken.IsCancellationRequested)
  {
    while (true)
    {            
      if (await _reader.ExpiredAsync())
      {
        var package = await _reader.GetAsync();
        _packageRepository.Add(package);
      }
      await Task.Delay(TimeSpan.FromSeconds(10), cancellationToken);
    }
  }
}

我的存储库每次重新初始化'_files',因为我完全重建了缓存(如果它已过期)。

private readonly ReaderWriterLockSlim _cacheLock = new ReaderWriterLockSlim();
public void Add(Package package)
{
  _cacheLock.EnterWriteLock();
  try
  {
    _files = new List<FilesOfSomekind>(package.Files);
  }
  finally
  {   
    _cacheLock.ExitWriteLock();
  }
}

private List<FilesOfSomekind> Read()
{
  _cacheLock.EnterReadLock();
  try
  {
    return _files;
  }
  finally
  {
    _cacheLock.ExitReadLock();
  }
}

我的问题是初始调用,当'_files'中没有任何内容时,可能需要几秒钟才能构建缓存并且我想阻止访问Read()。

有什么方法可以解决这个问题吗?

0 个答案:

没有答案