c# – 如何保持我的Async方法线程安全?
发布时间:2020-12-15 23:26:47 所属栏目:百科 来源:网络整理
导读:我需要在 Windows Universal App中编写一个方法来写入SD卡.如何确保两个线程不会尝试在下面的方法中同时写入同一个文件? public async void WriteToCard(string strFileName,IEnumerablestring listLinesToWrite){ IStorageItem item = await folder.GetIte
我需要在
Windows Universal App中编写一个方法来写入SD卡.如何确保两个线程不会尝试在下面的方法中同时写入同一个文件?
public async void WriteToCard(string strFileName,IEnumerable<string> listLinesToWrite) { IStorageItem item = await folder.GetItemAsync(strFileName); StorageFile file = (StorageFile)item; await Windows.Storage.FileIO.WriteLinesAsync(file,listLinesToWrite); } 解决方法
您可以使用包含
AsyncLock 的
AsyncEx库
假设不会有大量的文件名,您可以使用ConcurrentDictionary将文件名与锁相关联 – 否则,字典大小可能会不受约束. private readonly locks = new ConcurrentDictionary<string,AsyncLock>(); public async void WriteToCard(string strFileName,IEnumerable<string> listLinesToWrite) { var lock = locks.GetOrAdd(strFileName,() => new AsyncLock()); using (await lock.LockAsync()) { IStorageItem item = await folder.GetItemAsync(strFileName); StorageFile file = (StorageFile)item; await Windows.Storage.FileIO.WriteLinesAsync(file,listLinesToWrite); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |