【问题标题】:How to get file attributes (size, created, modified, ...) asynchronously in .NET如何在 .NET 中异步获取文件属性(大小、创建、修改等)
【发布时间】:2022-12-11 04:35:51
【问题描述】:

在 .NET 中,我们可以使用 FileInfo 类从文件系统访问元数据。

FileInfo API 是同步的。我想创建文件时间戳的缓存,并期望高水平的并发访问。由于是同步的,延迟会在我的场景中导致很多争用。

有没有办法在 .NET 中异步获取文件属性? P/Invoke 作为最后的手段是可以接受的。

【问题讨论】:

  • 我发布了这个问题,因为我发现网上没有关于该主题的讨论。

标签: .net asynchronous filesystems


【解决方案1】:

我不确定我是否完全理解你需要做什么。但我认为您正在寻找类似这种方法的方法:

        private readonly ConcurrentDictionary<string, Task<DateTime>> _cacheDictionary = new();

        public async Task<DateTime> GetFileCreationTime(string filePath)
        {
            return await _cacheDictionary.GetOrAdd(filePath, path =>
            {
                return Task.Run(() =>
                    {
                        var fileInfo = new FileInfo(path);
                        return fileInfo.CreationTime;
                    }
                );
            });
        }

在此示例中,创建 FileInfo 类的实例并获取有关文件的数据在新任务中开始。如果存在针对同一个文件的并行查询,则字典将返回检索文件信息的新 Task 或已启动的 Task。这意味着所有并行请求都在异步等待单个任务来检索数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多