在C#中,当使用BeginReceive / EndReceive方法接收网络数据时,是否有任何理由在收到数据包后不应立即处理?一些任务可以是密集的cpu密集。我问,因为我已经看到一些实现将数据包推送到处理队列然后在那里处理它们。对我来说,这似乎是多余的,因为据我所知,异步方法在线程池上运行。

有帮助吗?

解决方案

正如Mitch指出的那样,您需要能够接收足够的数据包以获得完整的消息/帧。但是没有理由不立即开始处理该帧并发出另一个BeginReceive。事实上,如果您认为您的处理可能需要一些时间,那么最好将其交给工作线程池,而不是阻止来自i / o池的线程(这是您的回调将触发的位置)。

此外,除非您期望连接数量较少,否则产生一个线程来处理每个连接并不是一种非常可扩展的方法,尽管它确实具有一些简单性的好处。

我最近写了一篇关于管道网络套接字数据处理的文章,你可以找到这里

其他提示

通常,您需要接收“足够”的数据包才能拥有“可处理”的数据项。

IMO,最好让一个线程的作业接收数据,另一个线程实际处理它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top