加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读