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

mdo*_*wes 3 .net c#

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

当使用类WriteAllText的 或AppendAllText方法时File,输出文件的长度为 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);
Run Code Online (Sandbox Code Playgroud)

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

Kar*_*ral 5

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

所以正确的调用是:

await File.AppendAllTextAsync("temp.json", jsonString);
Run Code Online (Sandbox Code Playgroud)