ネットワークアプリケーションプロトコル用のクライアントライブラリを開発しています。
クライアントコードはライブラリを呼び出してライブラリを初期化し、サーバーに接続します。クライアントはもちろんサーバーにリクエストを送信できますが、サーバーはクライアントにリクエスト(コマンド、以下ではCmdと呼びます)を送信することもできます。
トランスポートプロトコルはTCP/IPであるため、基本的にクライアントライブラリはサーバーに接続し、非同期メソッドを呼び出してサーバーから次の要求または応答を取得し、からの応答/要求を待機している間のI/Oブロッキングを回避します。サーバー。
そうは言っても、クライアントがサーバーからの要求を受信できるようにするために、ライブラリに2つの可能な解決策(C#構造のみを使用し、特定のサードパーティフレームワークを使用しない)があります。
図書館で次のようなイベントを提供する
public EventHandler<ReceivedCmdEventArgs> event ReceivedCmd;
サーバーから着信するリクエストの通知を受け取るために、クライアントがサブスクライブすること。もちろん、このメカニズムでは、サーバーからリクエストを受信し、Cmd受信でイベントを発生させるために、クライアントライブラリで非同期ループを作成する必要があります。
または、他の解決策は、クライアントライブラリでそのようなメソッドを作成することです
public async Task<Cmd> GetNextCmdAsync()
クライアントコードが非同期ループを呼び出してコマンドを受信すること。
これらのソリューションは同じようなものですか?C#5のasync / await constrcutsを完全に使用し、イベントに依存しない方がよいでしょうか?違いは何ですか?何かお勧め、コメント?
ありがとう !