System.IO.File 类的 WriteAllTextAsync 方法不输出大于 4kb 的文本


如果大小

大于 4kb,WriteAllTextAsyncAppendAllTextAsync 方法将无法写入字符串的内容。我假设这是某种缓冲区限制,但这些方法不支持接受缓冲区大小作为参数的重载方法。我正在使用.net框架4.7.2

当使用File类的WriteAllTextAppendAllText方法时,输出文件的长度为 254 kb,写入整个文本,但使用这些方法Async版本时,仅写入 4kb 的输出。

//Populate jsonString variable with a very large string
string jsonString = "placeholder for string content"; 
//Below code will output partial string till 4kb in length
File.AppendAllTextAsync("temp.json", jsonString);
//Below code outputs the entire content
File.AppendAllText("temp.json", jsonString);

有人可以为这种行为提供解释和问题的解决方案吗

您正在以不好的方式使用异步调用。以这种方式调用File.AppendAllTextAsync时,将执行新任务。您必须使用关键字 await 等待此方法的结果。如果不等待,则在异步调用完成并写入不完整的文本之前,程序将结束。

所以正确的选择是:

await File.AppendAllTextAsync("temp.json", jsonString);

如果您在控制台应用程序中尝试此操作,则该过程可能没有时间编写所有内容。你能尝试更换吗

File.AppendAllTextAsync("temp.json", jsonString);

var task = File.AppendAllTextAsync("temp.json", jsonString);
task.Wait();

编辑:对 .等待() 或 .结果创建死锁,在 UI 线程的上下文中有效。这里的情况并非如此。

相关内容

最新更新