是否必须等待异步写入单个文件?

问题描述

调用 File.WriteallTextAsync 多次写入单个文件而不等待结果是否安全,只要所有调用都在单个线程中进行?

安全我的意思是:

这似乎运行良好,但能保证这样做吗?

for (var i = 0; i < 1000; ++i)
{
    File.WriteallTextAsync(fileName,i.ToString());
}

解决方法

不,这不安全。您可能会收到“文件已在使用中”异常。 您需要等待或同步执行。

,

不,这不安全。不保证不会抛出异常¹ 或所有文本都将写入文件。它似乎工作的唯一原因是因为 .NET 中的异步文件系统 API are not implemented efficiently,并且它们中的大多数会阻塞调用线程,而不是像它们应该的那样异步启动操作。我的建议是改用同步 API (File.WriteAllText)。

¹ 虽然抛出的异常可能不会被观察到,因为异步操作是以即发即忘的方式启动的。