File: System\Net\Http\EmptyContent.cs
Web Access
Project: src\src\runtime\src\libraries\System.Net.Http\src\System.Net.Http.csproj (System.Net.Http)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.IO;
using System.Threading;
using System.Threading.Tasks;

namespace System.Net.Http
{
    /// <summary>Provides a zero-length HttpContent implementation.</summary>
    internal sealed class EmptyContent : HttpContent
    {
        protected internal override bool TryComputeLength(out long length)
        {
            length = 0;
            return true;
        }

        protected override void SerializeToStream(Stream stream, TransportContext? context, CancellationToken cancellationToken)
        { }

        protected override Task SerializeToStreamAsync(Stream stream, TransportContext? context) =>
            Task.CompletedTask;

        protected override Task SerializeToStreamAsync(Stream stream, TransportContext? context, CancellationToken cancellationToken) =>
            cancellationToken.IsCancellationRequested ? Task.FromCanceled(cancellationToken) :
            SerializeToStreamAsync(stream, context);

        protected override Stream CreateContentReadStream(CancellationToken cancellationToken) =>
            EmptyReadStream.Instance;

        protected override Task<Stream> CreateContentReadStreamAsync() =>
            Task.FromResult<Stream>(EmptyReadStream.Instance);

        protected override Task<Stream> CreateContentReadStreamAsync(CancellationToken cancellationToken) =>
            cancellationToken.IsCancellationRequested ? Task.FromCanceled<Stream>(cancellationToken) :
            CreateContentReadStreamAsync();

        internal override Stream? TryCreateContentReadStream() => EmptyReadStream.Instance;

        internal override bool AllowDuplex => false;
    }
}