Какой смысл имеет асинхронный ввод-вывод, если поток все равно заблокирован (см. Пример) - PullRequest
3 голосов
/ 31 марта 2010

Я нашел пример для асинхронной загрузки ftp на msdn, который выполняет следующее (фрагмент):

        // Asynchronously get the stream for the file contents.
        request.BeginGetRequestStream(
            new AsyncCallback (EndGetStreamCallback), 
            state
        );

        // Block the current thread until all operations are complete.
        waitObject.WaitOne();

То, что я не понимаю здесь, это то, какой смысл делает асинхронный ввод-вывод, если поток все равно заблокирован с явной ручкой ожидания. Я всегда думал, что преимущество асинхронного ввода-вывода состоит в том, что пользователь / программа не должен ждать.

Ответы [ 3 ]

4 голосов
/ 31 марта 2010

Это просто пример.

В приложении Real World (TM) ваш код может работать с потоком GUI. И все мы знаем, что блокировка потока GUI является убийственной, когда дело касается пользовательского опыта.

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

1 голос
/ 31 марта 2010

Да, это не имеет особого смысла. Я предполагаю, что смысл примера в том, чтобы продемонстрировать синтаксис вызова его асинхронно, но вы правы, если вы просто собираетесь блокировать, вы в первую очередь побеждаете точку асинхронного вызова.

1 голос
/ 31 марта 2010

Это может быть сделано только для примера - с использованием минимального кода, необходимого, чтобы показать, как это делается.

Что вы получаете из приведенного выше кода, так это то, что основной поток не использует ЦП при ожидании завершения операции - что может быть логичным, если вы используете GUI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...