gpt4 book ai didi

c# - 小查询应该是异步的吗?

转载 作者:行者123 更新时间:2023-11-30 23:20:53 26 4
gpt4 key购买 nike

我看到 System.IO 中的简单文件系统操作不是异步的(移动文件、删除文件)。遵循这个原则——小查询应该是异步的吗?如果是这样,小查询的边界是什么? <5 毫秒? <50 毫秒?

最佳答案

当异步 API 可用时,几乎没有理由使用同步调用。棘手的部分是许多操作没有异步 API。

System.IO 的工作原理 Root 于过去很长一段时间的设计决策,当时网络驱动器(更不用说“云存储”)之类的东西相对较少,而驱动器很小。 “打开文件”等操作没有异步 API,而其他一些具有异步 API 的操作不一定在 .NET 中可用。

您很少需要考虑异步调用的成本 - 与任何 I/O 操作相比,它可以忽略不计。所以诀窍是考虑不涉及实际 I/O 的情况——例如,当逐字节读取文件时,实际上大部分时间都花在从内存缓冲区中读取,使得异步开销很大。但替代方案不使用同步 API,它确保缓冲以合理的数据 block 而不是单个字节进行。

没有什么会使异步 API 本质上变慢。例如,Windows 中的同步文件 API 仍然调用异步 API - 然后等待结果(标志有一些差异,但并不重要)。自大约 Windows 2000 以来,桌面 Windows 世界中还没有真正的同步 I/O 操作(IIRC,95 年代 Windows 的支持有点……棘手)。

如果文件系统 API 是今天设计的,File.Move 肯定 是一个异步操作。事实上,在 Windows API 中,还有两个更现代的变体 - MoveFileExMoveFileWithProgress,它们都是异步的。唯一的问题是 .NET 不直接公开它们,因此您需要使用 P/Invoke 来调用它们。不用说,它们在网络共享方面非常有用。

关于c# - 小查询应该是异步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39567764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com