如何将Timer.Elapsed与我的WCF服务同步?

时间:2012-10-23 17:23:04

标签: c# wcf timer synchronization

[ServiceBehavior(InstanceContextMode.PerSession,
    UseSynchronizationContext=false,
    ConcurrencyMode = ConcurrencyMode.Single)]
class IMyService : IMyService
{
    System.Timers.Timer timer;
    ....

    void timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        // I want to arrive here on the service thread
    }
}

我的服务参数如上所述。

我在某个服务状态对象中使用System.Timers.Timer,我希望Timer.Elapsed事件在服务线程上重新启动。使用SynchronizationContext,我可以使用此方法实现此目的:

context.Post(SendOrPostCallback callback, object state)

我可以把它放在Timer.Elapsed事件中,并且将在服务线程上调用回调,这就是我想要的。

如果没有SynchronizationContext,我显然需要使用ISynchronizeInvoke对象设置Timer.SynchronizingObject,以便相应地编组已过去的事件。但是从哪里可以从WCF服务中获取ISynchronizeInvoke对象?它有吗?

0 个答案:

没有答案