我希望我不必复制完整的示例或创建一个最小的解决方案,这个问题是我的一些基本知识问题。
我有一个与 Azure 存储同步数据的应用程序,一切正常,上传部分已经在异步方法中。这一切都有效。
我试图进行更多优化,并希望将 stream.CopyTo 更改为 CopyToAsync。
using(var filestream = streamProvider())
{
filestream.CopyTo(stream);
stream.Position = 0;
}
我将其更改为 await filestream.CopyToAsync(stream) 并且仅上传了部分文件。
在撰写本文时,我发现异常抛出是“解码时发现无效数据”,IO.InvalidDataException。
这让我回到了作为 GZip/ 或 DeflateStream 的流 - 所以我的问题是关于它是否不希望在这些流上与 CopyToAsync 一起使用?
语境
public async Task UploadFile(string storePath, Func<Stream> streamProvider, bool copyLocalBeforeUpload = false)
{
using (new Timer(this.MessageQueue, "UPLOAD", storePath))
{
using (var stream = copyLocalBeforeUpload ? new MemoryStream() : streamProvider() )
{
try
{
if (copyLocalBeforeUpload)
{
using (var filestream = streamProvider())
{
await filestream.CopyToAsync(stream);
stream.Position = 0;
}
}
var blob = GetBlobReference(storePath);
await blob.UploadFromStreamAsync(stream,new BlobRequestOptions { RetryPolicy = new LinearRetry(TimeSpan.FromMilliseconds(100), 3) });
}
catch (Exception e)
{
if (this.MessageQueue != null)
{
this.MessageQueue.Enqueue(string.Format("Failed uploading '{0}'", storePath));
}
}
}
}
}