通过相同的套接字发送和接收但在不同的线程中?

时间:2013-03-12 12:22:00

标签: c# network-programming

我想在一个线程上发送请求并在另一个线程上收集响应。如何工作,我无法将请求与响应相匹配?假设我无法自定义请求/响应。 如果我在一个线程上发送请求,那么它甚至可以与接收线程/端一起工作?它收到的东西不会被混淆,因为我仍然在收到第一个请求的同时将东西发送到同一个套接字?

2 个答案:

答案 0 :(得分:1)

听起来你正在写一个多路复用器。如果我们假设每个请求在某个时刻都会得到一个响应(假设没有严重错误),那么您需要保留一个队列中某个已发送请求的队列,这样当您收到响应时,您可以匹配对请求的响应。正确的顺序。确保个别请求以原子方式不间断地写入是至关重要的;这可以通过锁定(围绕写入)或通过创建单独的待处理出站消息队列来完成。

我这样做的方法是使用Task API;每个待处理的响应基本上映射到TaskCompletionSource<T>(对于某些T);当您收到回复时,您可以TrySetResult(或错误),表示来电者已完成 - 我们可以使用WaitContinueWith还是await

答案 1 :(得分:0)

主要的开放性问题是对方是否异步处理请求/响应 如果服务器以相同的顺序响应,那么我将添加BlockingCollection作为Fifo队列作为数据存储。 (BlockingCollection的默认集合类型是ConcurrentQueue) 发件人添加到BlockingCollection,接收者从集合中获取。

相关问题