Я разрабатываю клиентскую библиотеку для протокола сетевого приложения.
Клиентский код вызывает библиотеку для ее инициализации и подключения к серверу. Клиент, конечно, может отправлять запросы на сервер, но сервер также может отправлять запросы (Команды, называемые Cmd ниже )клиенту.
Транспортным протоколом является TCP/IP, поэтому в основном клиентская библиотека подключается к серверу и вызывает асинхронный метод для получения следующего запроса или ответа от сервера, чтобы избежать блокировки ввода-вывода при ожидании ответа/запросов от сервера. сервер.
При этом я вижу два возможных решения (только с использованием конструкций C #и без какой-либо конкретной сторонней платформы )в библиотеке, позволяющей клиенту получать запросы от сервера :
. Либо предложите событие в библиотеке типа
public EventHandler<ReceivedCmdEventArgs> event ReceivedCmd;
на которые клиент подпишется, чтобы получать уведомления о запросах, поступающих с сервера. Конечно, для этого механизма мне придется сделать асинхронный цикл в клиентской библиотеке, чтобы получать запросы от сервера и вызывать событие при приеме Cmd.
Или другим решением было бы сделать такой метод в клиентской библиотеке
public async Task<Cmd> GetNextCmdAsync()
что клиентский код будет вызывать асинхронный цикл для получения cmds.
Являются ли эти решения одинаковыми? Не лучше ли полностью использовать асинхронные/ожидающие конструкции C #5 и больше не полагаться на события? Каковы различия? Любая рекомендация, замечание?
Спасибо !