Я делаю UWP-приложение, которое загружает файлы в facebook, я использую пользовательский HttpContent для загрузки файлов в 4k-блоках, чтобы минимизировать использование памяти для больших файлов ( > 100mb) и сообщать о достигнутых результатах.
Мой пользовательский HttpContent UploadWithProgressHttpContent:
 class UploadWithProgressHttpContent : HttpContent
{
    private readonly IProgress<OperationProgress> _progress;
    private readonly OperationProgress _data;
    private readonly Stream _file;
    private readonly int _bufferSize;
    private readonly CancellationToken _token;
    public UploadWithProgressHttpContent(
        IProgress<OperationProgress> progress,
    OperationProgress data,
    Stream file,
    int bufferSize,
    CancellationToken token)
{
    _progress = progress;
    _data = data;
    _file = file;
    _bufferSize = bufferSize;
    _token = token;
}
protected override Task SerializeToStreamAsync(Stream stream, TransportContext context)
{
    return CopyStreamWithProgress(_file, stream, _progress, _token, _data, _bufferSize);
}
public static async Task<Stream> CopyStreamWithProgress(
    Stream source,
    Stream destination,
    IProgress<OperationProgress> progress,
    CancellationToken token,
    OperationProgress progressData,
    int bufferSize
    )
{
    int read, offset = 0;
    var buffer = new byte[bufferSize];
    using (source)
    {
        do
        {
            read = await source.ReadAsync(buffer, 0, bufferSize, token);
            await destination.WriteAsync(buffer, 0, read, token);
            offset += read;
            progressData.CurrentSize = offset;
            progress.Report(progressData);
        } while (read != 0);
    }
    return destination;
}
}
То, что я испытываю (используя скрипач), состоит в том, что весь файл загружается в память до начала загрузки (мой счетчик достижений достигает 100% до начала загрузки).
Я попытался установить TransferEncodingChunked на true и установить длину содержимого файла, но проблема остается.
Источник загрузки находится внутри PCL (если это имеет значение). Я использую последнюю версию System.Net.Http. В случае необходимости я использую это точно так же, как он используется в MediaFire SDK
Спасибо за любую помощь.
EDIT: добавлено использование HttpClient:
public async Task<T> Upload<T>(Stream fileStream, string fileName)
{
    var handler = new HttpClientHandler();
    var cli = new HttpClient(handler);
    foreach (var header in Headers)
    {
        cli.DefaultRequestHeaders.Add(header.Key, header.Value);
    }
    var parameters = new MultipartFormDataContent();
    foreach (var parameter in Parameters)
    {
        parameters.Add(new StringContent(parameter.Value), parameter.Key);
    }
    if (fileStream != null)
    {
        var fileContent = new UploadWithProgressHttpContent(ProgressOperation, ProgressData, fileStream,
            _chunkBufferSize, Token, fileStream.Length);
        fileContent.Headers.ContentType = new MediaTypeHeaderValue(MimeTypeHelper.GetMimeType(fileName));
        fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue(StreamParamName);
        fileContent.Headers.ContentDisposition.FileName = fileName;
        fileContent.Headers.ContentLength = fileStream.Length;
        parameters.Add(fileContent, StreamParamName);
    }
    var req = new HttpRequestMessage(method, Path) { Content = parameters };
    if (fileStream != null)
        req.Headers.TransferEncodingChunked = true;
    var completionOption = HttpCompletionOption.ResponseContentRead;
    var resp = await cli.SendAsync(req, completionOption, Token).ConfigureAwait(false);
    return await DeserializeObject<T>(resp);
}
