Метод fromasync в экземпляре iasyncresult: «не содержит определения для 'fromasync'»

Мне нужно использовать класс, который позволяет мне использовать «Диапазон» в заголовке и в то же время обновлять индикатор выполнения. Я видел сообщение, и кто-то разместил следующий код, который должен помочь HttpWebRequest реализовать индикатор выполнения:

public static void CopyToStreamAsync(this Stream source, Stream destination, Action<Stream, Stream, Exception> completed, 
                                         Action<uint> progress, uint bufferSize, uint? maximumDownloadSize, TimeSpan? timeout)
    {
        byte[] buffer = new byte[bufferSize];

        Action<Exception> done = exception =>
        {
            if (completed != null)
            {
                completed(source, destination, exception);
            }
        };

        int maxDownloadSize = maximumDownloadSize.HasValue ? (int)maximumDownloadSize.Value : int.MaxValue;
        int bytesDownloaded = 0;
        IAsyncResult asyncResult = source.BeginRead(buffer, 0, new[] { maxDownloadSize, buffer.Length }.Min(), null, null);
        Action<IAsyncResult, bool> endRead = null;
        endRead = (innerAsyncResult, innerIsTimedOut) =>
        {
            try
            {
                int bytesRead = source.EndRead(innerAsyncResult);
                if (innerIsTimedOut) done(new TimeoutException());

                int bytesToWrite = new[] { maxDownloadSize - bytesDownloaded, buffer.Length, bytesRead }.Min();
                destination.Write(buffer, 0, bytesToWrite);
                bytesDownloaded += bytesToWrite;

                if (progress != null && bytesToWrite > 0) progress((uint)bytesDownloaded);

                if (bytesToWrite == bytesRead && bytesToWrite > 0)
                {
                    asyncResult = source.BeginRead(buffer, 0, new[] { maxDownloadSize, buffer.Length }.Min(), null, null);
                    asyncResult.FromAsync((ia, isTimeout) => endRead(ia, isTimeout), timeout);

                }
                else
                {
                    done(null);
                }
            }
            catch (Exception exc)
            {
                done(exc);
            }
        };

        asyncResult.FromAsync((ia, isTimeout) => endRead(ia, isTimeout), timeout);
    }

Проблема в том, что я даже не могу его протестировать, потому что «asyncResult.FromAsync» возвращает «не содержит определения для FromAsync и ошибки метода расширения FromAsync».

Может ли кто-нибудь помочь мне понять, какие ссылки или какую .NET Framework мне следует использовать, чтобы код работал?

Спасибо

Если вы посмотрите здесь, вы увидите, что в этом интерфейсе нет метода FromAsync. Может быть, это кастомное расширение, скрывающее использование TaskFactory.FromAsync?

Jeroen Heier 10.08.2018 17:09

Может быть. Фактически, я пытался это проверить, но использование тайм-аута меня смутило.

Willye Magro 10.08.2018 17:30
0
2
24
0

Другие вопросы по теме