是否必须等待对单个文件的异步写入?
Do async writes to a single file have to be awaited?
调用 File.WriteAllTextAsync 多次写入单个文件而不等待结果是否安全,只要所有调用都在单个线程中进行?
安全是指:
- 不会抛出IO异常
- 之后文件将包含上次调用的内容
这似乎 运行 没问题,但是否保证这样做?
for (var i = 0; i < 1000; ++i)
{
File.WriteAllTextAsync(fileName, i.ToString());
}
不,这不安全。您可能会收到“文件已在使用”异常。
您需要等待或同步执行。
不,这不安全。不保证不会抛出任何异常或所有文本都将写入文件。它似乎起作用的唯一原因是因为 .NET 中的异步文件系统 APIs ,它们中的大多数阻塞调用线程,而不是像它们应该的那样异步启动操作。我的建议是使用同步 API 代替 (File.WriteAllText
).
¹ 尽管抛出的异常可能仍未被观察到,因为异步操作是以即发即弃的方式启动的。
调用 File.WriteAllTextAsync 多次写入单个文件而不等待结果是否安全,只要所有调用都在单个线程中进行?
安全是指:
- 不会抛出IO异常
- 之后文件将包含上次调用的内容
这似乎 运行 没问题,但是否保证这样做?
for (var i = 0; i < 1000; ++i)
{
File.WriteAllTextAsync(fileName, i.ToString());
}
不,这不安全。您可能会收到“文件已在使用”异常。 您需要等待或同步执行。
不,这不安全。不保证不会抛出任何异常或所有文本都将写入文件。它似乎起作用的唯一原因是因为 .NET 中的异步文件系统 APIs File.WriteAllText
).
¹ 尽管抛出的异常可能仍未被观察到,因为异步操作是以即发即弃的方式启动的。