0

我希望我不必复制完整的示例或创建一个最小的解决方案,这个问题是我的一些基本知识问题。

我有一个与 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));
                }
            }
        }
    }
}
4

0 回答 0