我正在开发一个用于网络应用协议的客户端库。
客户端代码调用库进行初始化并连接到服务器。客户端可以向服务器发送请求,但服务器也可以向客户端发送请求(命令,在下面称为Cmd)。
传输协议是TCP/IP,因此客户端库连接到服务器,并调用异步方法以从服务器检索下一个请求或响应,以避免在等待服务器响应/请求时发生I/O阻塞。
话虽如此,我在库中看到了两种可能的解决方案(仅使用C#构造和没有特定的第三方框架),以允许客户端从服务器接收请求:
要么在库中提供一个事件
public EventHandler<ReceivedCmdEventArgs> event ReceivedCmd;
客户端需要订阅相关通知,以便及时接收来自服务器的请求。为此,我需要在客户端库中创建一个异步循环来接收来自服务器的请求,并在接收到命令时触发事件。
另一种解决方案是在客户端库中创建一个相应的方法。
public async Task<Cmd> GetNextCmdAsync()
客户端代码将在异步循环中调用以接收命令。
这些解决方案是否有点相似?是完全使用C#5的async/await构造还是不再依赖事件更好?有什么区别?有任何建议或备注吗?
谢谢!