我正在为网络应用程序协议开发客户端库。
客户端代码调用库来初始化它并连接到服务器。客户端当然可以向服务器发送请求,但是服务器也可以向客户端发送请求(Commands,下面称为Cmd)。
传输协议是 TCP/IP,所以基本上客户端库连接到服务器并调用异步方法以从服务器检索下一个请求或响应,以避免在等待来自的响应/请求时 I/O 阻塞服务器。
话虽如此,我在库中看到了两种可能的解决方案(仅使用 C# 构造,没有特定的第三方框架),以允许客户端接收来自服务器的请求:
要么在图书馆提供活动,例如
public EventHandler<ReceivedCmdEventArgs> event ReceivedCmd;
客户端将订阅,以便收到来自服务器的请求的通知。当然,对于这种机制,我必须在客户端库中创建一个异步循环来接收来自服务器的请求并在 Cmd 接收时引发事件。
或者另一种解决方案是在客户端库中制作这样的方法
public async Task<Cmd> GetNextCmdAsync()
客户端代码将在异步循环中调用以接收 cmd。
这些解决方案是否相同?完全使用 C#5 的 async/await 构造而不依赖事件会更好吗?有什么区别 ?有什么建议,备注?
谢谢 !