我有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()。
有什么方法可以解决这个问题吗?