我遇到的情况是,我有一个 TCPClient 轮询线程(这是离散 TCP 设备的最佳计划吗?),它聚合消息并偶尔通过触发事件来响应这些消息。事件生产者实际上并不关心线程是否被长时间阻塞,但消费者的设计是这样的,我更愿意让它在我用于处理状态的单个工作线程上调用处理程序机器。
那么问题是这样的。我应该如何使用任务库最好地管理这些线程的创建、配置(线程名称、背景等)生命周期以及调用的编码(marshal)处理?我对使用 Thread 类型显式执行此操作有些熟悉,但在可能的情况下,我的公司更喜欢通过使用 Task 来完成我们能做的事情。
编辑:我相信我在这里需要的将基于消费者类型的 SynchronizationContext,确保任务在与该上下文相关的单个线程上进行调度。
最佳答案
The question then is this. How should I best manage the creation, configuration (thread name, is background, etc.) lifetime, and marshaling of calls for these threads using the Task library?
这听起来像是 BlockingCollection<T>
的完美用例。此类是专为生产者/消费者场景而设计的,允许您将任何线程添加到集合中(其作用类似于线程安全队列),以及一个(或多个)线程或任务调用 blockingCollection.GetConsumingEnumerable()
“消耗”这些元素。
关于c# - 如何使用 TPL 在 C# 中编码(marshal)对特定线程的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11938085/