我在项目中使用Librsync来计算文件的两个版本之间的差异并将更改应用于旧文件。Stream.CopyTo与Librsync.PatchStream一起使用时挂起
在我的项目之外,我在一个简单的控制台应用程序中工作,该应用程序从2个不同的目录中读取文件,“修补”它们并将其写入补丁目录。
代码示例 -
using (var deltaFile = new FileStream(tmpDeltaFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None))
{
//myClient is the client of a WCF service I created
myClient.ComputeDelta(file.Id, signatureStream).CopyTo(deltaFile);
originalFile.Seek(0, SeekOrigin.Begin);
deltaFile.Seek(0, SeekOrigin.Begin);
var patchedStream = Librsync.ApplyDelta(originalFile, deltaFile);
using (var patchedFileStream = new FileStream(patchedFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None))
{
//Code below just hangs. patchedStream pos = 0 and the length is the same as that of the new file.
patchedStream.CopyTo(patchedFileStream);
}
}
暂停调试器并用外部代码发布手的调用堆栈。 – usr
挂起 - 'public override int Read(byte [] buffer,int offset,int count) { return ReadAsync(buffer,offset,count).Result; }' 在PatchedStream.cs https://github.com/braddodson/librsync.net/blob/master/librsync.net/PatchedStream.cs – chickenbeef
的'.Result'东西看起来像一个传统的ASP。 NET死锁。这是一个未知代码中的错误。把整个东西包装在'Task.Run(()=> ...)。Wait();'来测试这个。 – usr