我的异步方法收到一个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类,将原始流作为输入,复制一个块作为缓冲区,并记住原始流的位置,这会有用吗?