异步等待:在解释时将流写入文件

时间:2019-05-21 06:48:23

标签: async-await stream

我的异步方法收到一个CanSeek流。必须将完整的流写入文件。必须对流的前1000个字节进行解释才能从流中获取一些数据。

以下将起作用:

async Task<MyData> SaveStreamFetchData(System.IO.Stream stream)
{
     // interpret the beginning of the Stream:
     MyData interpretedData = await InterpretData(stream);
     stream.Position = 0;

     // Save stream in file:
     await SaveStreamInFile(stream);
     return interpretedData;
}

如果我能在解释它的同时开始保存流,那就太好了

var taskSave = SaveStreamInFile(stream);

// while saving the stream in a file start interpreting it:
MyData interpretedData = await InterpretData(stream);
await taskSave;

return interpretedData;

显然,这将导致问题:在解释流时,流的位置将不正确。

问题:是否可以做一些聪明的事情,使我可以在将数据写入文件时开始解释数据?

我认为将流复制到新流不会提高性能。制作一个特殊的Stream类,将原始流作为输入,复制一个块作为缓冲区,并记住原始流的位置,这会有用吗?

0 个答案:

没有答案