private static async Task <string> MultipartContentToStringAsync(MultipartContent content, MultipartContentToStringMode mode, bool async)
        {
            Stream stream;

            switch (mode)
            {
            case MultipartContentToStringMode.ReadAsStreamAsync:
                stream = await content.ReadAsStreamAsync(async);

                break;

            default:
                stream = new MemoryStream();
                if (async)
                {
                    await content.CopyToAsync(stream);
                }
                else
                {
                    content.CopyTo(stream, null, default);
                }
                stream.Position = 0;
                break;
            }

            using (var reader = new StreamReader(stream))
            {
                return(await reader.ReadToEndAsync());
            }
        }
        public async Task MultipartContent_TryComputeLength_ReturnsSameLengthAsCopyToAsync(MultipartContent multipartContent)
        {
            Assert.True(multipartContent.TryComputeLength(out long length));

            var copyToStream = new MemoryStream();

            multipartContent.CopyTo(copyToStream, context: null, cancellationToken: default);
            Assert.Equal(length, copyToStream.Length);

            var copyToAsyncStream = new MemoryStream();
            await multipartContent.CopyToAsync(copyToAsyncStream, context : null, cancellationToken : default);

            Assert.Equal(length, copyToAsyncStream.Length);

            Assert.Equal(copyToStream.ToArray(), copyToAsyncStream.ToArray());
        }