我有单一资源(StorageFolder),我在操作中访问:
我使用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();
}
答案 0 :(得分:1)
https://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx
ReaderWriterLockSlim允许多个读者和一个作家。
编辑:现在我更仔细地阅读了这个问题,我注意到了异步;如果使用async,则无法使用ReaderWriterLockSlim。有关替代方案,请参阅ReaderWriterLockSlim and async\await。