Почему BlobClient.UploadAsyn c зависает при загрузке JSON через поток памяти? - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь загрузить JSON в Azure blob через поток памяти. Когда я вызываю UploadAsyn c, мое приложение зависает. Если я перенесу вызов UploadAsyn c за пределы фигурных скобок StreamWriter, я получу исключение System.ObjectDisposedException: «Невозможно получить доступ к закрытому потоку». исключение. Как я могу передать JSON в большой двоичный объект?

            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);
                }
            }

1 Ответ

1 голос
/ 20 июня 2020

Я использовал опцию leaveOpen, чтобы сохранить поток памяти открытым. Я также перемотал поток памяти перед загрузкой в ​​большой двоичный объект.

            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);
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...