dar*_*key 6 c# events async-await
我正在为网络应用程序协议开发客户端库.
客户端代码调用库来初始化它并连接到服务器.客户端当然可以向服务器发送请求,但服务器也可以向客户端发送请求(命令,下面称为Cmd).
传输协议是TCP/IP,因此基本上客户端库连接到服务器并调用异步方法以从服务器检索下一个请求或响应,以避免在等待响应/请求时阻止I/O服务器.
话虽这么说,我在库中看到两种可能的解决方案(仅使用C#构造,没有特定的第三方框架),以允许客户端从服务器接收请求:
要么在图书馆提供活动,如
public EventHandler<ReceivedCmdEventArgs> event ReceivedCmd;
Run Code Online (Sandbox Code Playgroud)
客户端将订阅,以便了解从服务器传入的请求.当然对于这种机制,我将不得不在客户端库中创建一个异步循环来接收来自服务器的请求并在Cmd接收时引发事件.
或者另一种解决方案是在客户端库中创建这样的方法
public async Task<Cmd> GetNextCmdAsync()
Run Code Online (Sandbox Code Playgroud)
客户端代码将在异步循环中调用以接收cmds.
这些解决方案有点相同吗?是否更好地完全使用C#5的async/await constrcuts而不再依赖于事件?有什么区别 ?任何建议,评论?
谢谢 !
我认为事件驱动的方法更适合您的情况。
事实上,您正在谈论可观察/观察者模式。如果收到某些命令,未知数量的侦听器/观察者正在等待执行某些操作。
异步/等待模式的工作效果不如事件驱动方法,因为它就像我期望一个结果与每当你向我报告你收到命令时我会做你想做的事情相反。
从概念上讲,我更喜欢事件驱动的方法,因为它更适合您的架构目标。
C# 5 中的异步/等待模式并非针对您的情况而设计,但它适用于某些代码执行异步任务并且应在任务收到结果后执行下一个代码行。