WCF+定时器。是一种不好的做法吗?

3

我希望我的服务能够与其他服务进行通讯。

为了让它像客户端一样启动通讯,我认为在构造函数中初始化一个定时器,每x秒调用一个方法可能是一个好主意。

这是个不好的想法吗?

1个回答

3
我认为这个方法应该没有问题。
你可以使用 System.Timers.Timer 类库,具体内容可查看https://msdn.microsoft.com/en-us/library/system.timers.timer%28v=vs.110%29.aspx
将 Timer 的 Interval 属性设定为你想要触发 Elapsed 事件的时间间隔。通过实现事件处理程序来订阅 Elapsed 事件,在事件处理程序中,你可以与外部服务进行通信。
附上简单的示例:
 class Program
    {
        private static void timer_ElapsedEventHandler(object sender, EventArgs e)
        {
            // communicate to external service
            Console.WriteLine("ElapsedEventHandler fired");
        }

        static void Main(string[] args)
        {
            var timer = new System.Timers.Timer();
            timer.Interval = 3000;
            timer.Elapsed += timer_ElapsedEventHandler;
            timer.Start();
            Console.WriteLine("Timer started");

            Console.ReadLine();
        }
    }

嘿,谢谢!我会等待看看是否有更多的回复,并将您的回复标记为答案。顺便说一句,您提供的链接是波兰语!这里是英文版本 https://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer%28v=vs.110%29.aspx - Oh hi Mark
顺便提一下,您初始化了 timer 而不是 DispatcherTimer,我读到它们由于运行的线程不同而不同。在我的情况下没有表单,所以 DispatcherTimer 是正确的吗? - Oh hi Mark
我已经从System.Windows.Threading命名空间初始化了DispatcherTimer。 Dispatcher计时器不限于单个线程,这意味着每个线程都有自己的调度程序。事件在与调度程序相同的线程上触发。如果您希望操作在单独的线程上运行,则应使用System.Threading.Timer或System.Timers.Timer。我刚提到的两个计时器非常相似,主要区别是System.Timers.Timer的SynchronizationObject属性,但我不认为它会影响您的情况。 - Andrew B
我刚刚看到了new DispatcherTimer();。谢谢! - Oh hi Mark
1
天啊!我已经调查过了,DispatcherTimer 无法在控制台应用程序的 Main 方法中正常工作,因为当 Main 方法的执行完成时 - 其进程会结束,因为没有其他线程在后台运行该应用程序(正如我在上面的评论中提到的 - DispatcherTimer 的事件在与其实例“生活”的同一线程上触发)。对于误导您,我感到抱歉。我已更新我的答案。当我写下那个评论时,我希望我真的能想到这一点... - Andrew B
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接