【发布时间】:2016-05-26 16:20:48
【问题描述】:
我有一个要写入文件的float 列表。下面的代码可以做到这一点,但它是同步的。
List<float> samples = GetSamples();
using (FileStream stream = File.OpenWrite("somefile.bin"))
using (BinaryWriter binaryWriter = new BinaryWriter(stream, Encoding.Default, true))
{
foreach (var sample in samples)
{
binaryWriter.Write(sample);
}
}
我想异步执行操作,但BinaryWriter 不支持异步操作,这是正常的,因为它每次只写入几个字节。但大多数时候操作使用文件 I/O,我认为它可以而且应该是异步的。
我尝试使用BinaryWriter 写入MemoryStream,完成后我使用CopyToAsync 将MemoryStream 复制到FileStream,但这会导致性能下降(总时间)高达100 % 大文件。
如何将整个操作转换为异步操作?
【问题讨论】:
-
你为什么希望它首先是异步的?当然,首先执行一个 cpu-bound 任务(序列化到内存流)然后执行一个 io-bound 任务(将内存流写入文件)比通过序列化到文件同时执行这两个任务要慢。
-
能够在不阻塞用户界面的情况下使用该方法。
-
然后使用
Task.Run就可以了。
标签: c# async-await binaryreader binarywriter