【发布时间】:2023-04-10 13:19:02
【问题描述】:
我有这样的类来循环监听某些事件并通知订阅者一些事件。
这个类是正确的还是有另一个更好的实现方式,使用 TPL?
public class Listener
{
public event EventHandler EventRaised;
private void RaiseEvent()
{
if(EventRaised!=null)EventRaised(someParam);
}
public Task Listen()
{
return Task.Factory.StartNew(
() =>
{
while(true)
{
//listen for some event
RaiseEvent();
}
}, token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
}
}
例子
var listener = new Listener();
listener.EventRaised += SomeMethod;
listerner.Listen();
我询问了在后台通知订阅者某些事件的最佳方式。
【问题讨论】:
-
你的目标是什么?这个类没有意义...
-
查看主题,我已编辑。
-
这个类只会不断地“通知”订阅者,在一个永无止境的循环中,并吃掉 CPU……你到底想做什么?
-
你能举一个你想听的事件的例子吗?它实际上是另一个类引发的事件还是您需要轮询外部资源?
-
在 RaiseEvent() 之前的代码中必须有一些动作(见代码中的注释)。
标签: c# .net multithreading parallel-processing task-parallel-library