我希望使用.NET SerialPort
进行同步通信(通过串行),并使用.NET Socket
进行异步通信(通过以太网)。
当前实现有一个Connection类,它声明SerialPort
和Socket
,并且取决于用户在GUI中定义设备的连接类型 - COM或以太网 - Connection类将初始化相应的串行或套接字端口。
我有一个包含所有连接的ConnectionManager。因此,如果用户使用相同的连接信息创建设备,则不会创建新的连接;相反,它只是分配了ConnectionManager中的Connection。
这是一个问题,因为我需要进行同步通信以及异步通信。当我连接到设备并且每个Task
正在尝试执行Task
和Send
时,会发生一个创建Receive
的循环,并且因为它设备完成任务所需的时间比软件创建任务所需的时间长,存在很多并发问题(被阻塞的线程)。由于我需要进行同步通信,因此我会在发送Mutex
之前锁定Send
并在Receive
之后释放互斥锁,以确保每次发送都会获得接收。这不好,因为当我尝试进行异步通信时,它会因为互斥锁而受到限制。
所以我的问题是在尝试同时处理异步和同步通信时要遵循的最佳设计是什么?是否应该有两个不同的连接类(AConnection,BConnection)继承具有Send,Receive,Open,Close方法的Connection接口?
感谢任何帮助。