私はLibrsyncをプロジェクトで使用していますが、ファイルの2つのバージョンの違いを計算し、その変更を古いファイルに適用します。Stream.CopyTo Librsync.PatchStreamと一緒に使用するとハングします
私のプロジェクトの外では、2つの異なるディレクトリからファイルを読み込み、 "パッチ"してパッチを適用したディレクトリに書き出す単純なコンソールアプリケーションで作業しました。
コードサンプル - 私たちは、これは「古典的なASP.NETのデッドロック」のインスタンスであることが分かったコメントで
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 []バッファ、intオフセット、intカウント) { return ReadAsync(buffer、offset、count) } 'PatchedStream.csで https://github.com/braddodson/librsync.net/blob/master/librsync.net/PatchedStream.cs – chickenbeef
' .Result'の事は、古典的なASPのように見えます。 NETデッドロック。これは不明なコードのバグです。これをテストするには、 'Task.Run(()=> ...)。Wait();'に全体をラップします。 – usr