锁定一种消费者的资源

时间:2017-05-11 10:27:59

标签: c# .net multithreading uwp .net-core

我有单一资源(StorageFolder),我在操作中访问:

  • AddFileAsync
  • ReadFileAsync
  • DeleteFolderAsync

我使用SemaphoreSlim.WaitAsync类来锁定资源,因此多个操作不会同时访问它。

我应该使用什么.net类而不是SemaphoreSlim,这样我才能调用多个AddFileAsync。和ReadFileAsync一致,但我无法再次致电AddFileAsync(resp ReadFolderAsync)和DeleteFolderAsync

换句话说,我想防止在其他线程读/写时删除文件夹。

当前代码(try / finally block ommited):

_sempaphore = new SemaphoreSlim(1);

async Task AddFileAsync(){
   await _sempaphore.WaitAsync();
   await _storageFolder.CreateFileAsync(....)
   _sempaphore.Release();
}

async Task DeleteFolderAsync(){
   await _sempaphore.WaitAsync();
   await _storageFolder.DeleteAsync()
   _sempaphore.Release();
}

1 个答案:

答案 0 :(得分:1)

https://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx

ReaderWriterLockSlim允许多个读者和一个作家。

编辑:现在我更仔细地阅读了这个问题,我注意到了异步;如果使用async,则无法使用ReaderWriterLockSlim。有关替代方案,请参阅ReaderWriterLockSlim and async\await