我开发了一些代码,它每 50 毫秒以名称/值对的形式从硬件设备接收一系列值。我想开发一个发布/订阅服务,当特定项目的值发生变化时,可以通知订阅者。订阅方法可能看起来像这样:-
public void Subscribe(string itemName, Action<string, long> callback)
读取硬件值的代码将检查自上次以来值是否已更改。如果是这样,它将遍历该项目的所有订阅者,调用他们的代表。就目前而言,代表将在同一个线程上被调用,这并不理想——我需要尽可能快地保持轮询。在单独的线程上调用回调委托的最佳方法是什么?订阅者应该传入(比如说)一个任务/线程,还是应该由发布者负责启动它们?
请注意,我需要将几个参数传递给委托(项目名称及其值),因此这可能会影响所采用的方法。我知道您可以将单个“状态”对象传递给任务,但要求订阅者实现一个 Action 回调委托(然后必须将其转换为包含名称和值的其他类型)感觉有点不直观。
另外,我假设每次调用委托时创建一个新任务/线程会损害性能,所以可能需要某种“池”?