Azure 为什么BlobClient.UploadAsync在通过内存流上载JSON时挂起?

Azure 为什么BlobClient.UploadAsync在通过内存流上载JSON时挂起?,azure,json.net,blob,azure-storage-blobs,memorystream,Azure,Json.net,Blob,Azure Storage Blobs,Memorystream,我正试图通过内存流将JSON上传到Azure blob。当我调用UploadAsync时,我的应用程序挂起。如果将UploadAsync调用移到StreamWriter花括号之外,则会得到System.ObjectDisposedException:“无法访问封闭流。”异常。如何将JSON流式传输到blob var blobClient = new BlobClient(new Uri(storageUri), options); var ser

我正试图通过内存流将JSON上传到Azure blob。当我调用UploadAsync时,我的应用程序挂起。如果将UploadAsync调用移到StreamWriter花括号之外,则会得到System.ObjectDisposedException:“无法访问封闭流。”异常。如何将JSON流式传输到blob

            var blobClient = new BlobClient(new Uri(storageUri), options);

            var serializer = JsonSerializer.Create(this.serializerSettings);

            using (var stream = new MemoryStream())
            {
                using (var writer = new StreamWriter(stream))
                {
                    serializer.Serialize(writer, job);

                    await blobClient.UploadAsync(stream, overwrite: true, cancellationToken: cancellationToken);
                }
            }

我使用了leaveOpen选项来保持内存流的打开。在上传到blob之前,我还对内存流进行了重绕

            var blobClient = new BlobClient(new Uri(storageUri), options);

            var serializer = JsonSerializer.Create(this.serializerSettings);

            using (var stream = new MemoryStream())
            {
                // Use the 'leave open' option to keep the memory stream open after the stream writer is disposed
                using (var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true))
                {
                    // Serialize the job to the StreamWriter
                    serializer.Serialize(writer, job);
                }

                // Rewind the stream to the beginning
                stream.Position = 0;

                // Upload the job via the stream
                await blobClient.UploadAsync(stream, overwrite: true, cancellationToken: cancellationToken);
            }

我使用了leaveOpen选项来保持内存流的打开。在上传到blob之前,我还对内存流进行了重绕

            var blobClient = new BlobClient(new Uri(storageUri), options);

            var serializer = JsonSerializer.Create(this.serializerSettings);

            using (var stream = new MemoryStream())
            {
                // Use the 'leave open' option to keep the memory stream open after the stream writer is disposed
                using (var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true))
                {
                    // Serialize the job to the StreamWriter
                    serializer.Serialize(writer, job);
                }

                // Rewind the stream to the beginning
                stream.Position = 0;

                // Upload the job via the stream
                await blobClient.UploadAsync(stream, overwrite: true, cancellationToken: cancellationToken);
            }

1) 序列化后,您需要刷新
StreamWriter
,理想的方法是使用
语句将其放入
中,而不是关闭底层流(请参阅)。2) 上传前,您需要通过设置
stream.Position=0来倒带
MemoryStream
。不知道这些是不是导致绞死的原因。看起来这是和的复制品。确切地表明该做什么。同意吗?谢谢你的回复。我看了那篇文章,但它没有显示正在刷新的流。通过
using
语句处理
StreamWriter
会刷新它。链接的答案显示了如何在不关闭基础流的情况下执行此操作。谢谢,我已使用链接的答案更新了我的答案。1)序列化后,您需要刷新
StreamWriter
,最好是使用
语句将其放置在
中,而不关闭基础流(请参阅)。2) 上传前,您需要通过设置
stream.Position=0来倒带
MemoryStream
。不知道这些是不是导致绞死的原因。看起来这是和的复制品。确切地表明该做什么。同意吗?谢谢你的回复。我看了那篇文章,但它没有显示正在刷新的流。通过
using
语句处理
StreamWriter
会刷新它。链接答案显示了如何在不关闭底层流的情况下完成此操作。谢谢,我已使用链接答案更新了我的答案。