вызов асинхронного метода и события

Я разрабатываю клиентскую библиотеку для протокола сетевого приложения.

Клиентский код вызывает библиотеку для ее инициализации и подключения к серверу. Клиент, конечно, может отправлять запросы на сервер, но сервер также может отправлять запросы (Команды, называемые Cmd ниже )клиенту.

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

При этом я вижу два возможных решения (только с использованием конструкций C #и без какой-либо конкретной сторонней платформы )в библиотеке, позволяющей клиенту получать запросы от сервера :

. Либо предложите событие в библиотеке типа

public EventHandler<ReceivedCmdEventArgs> event ReceivedCmd;

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

Или другим решением было бы сделать такой метод в клиентской библиотеке

public async Task<Cmd> GetNextCmdAsync()

что клиентский код будет вызывать асинхронный цикл для получения cmds.

Являются ли эти решения одинаковыми? Не лучше ли полностью использовать асинхронные/ожидающие конструкции C #5 и больше не полагаться на события? Каковы различия? Любая рекомендация, замечание?

Спасибо !

6
задан darkey 20 August 2012 в 10:38
поделиться