首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF服务10 s要求同步

WCF服务10 s要求同步
EN

Stack Overflow用户
提问于 2013-12-16 15:08:57
回答 1查看 264关注 0票数 1

我正在使用,每10秒在WCF服务上同步一次。在某些系统中,我遇到了奇怪的SemaphoreFullExceptions,所以我试图重构这个同步后台线程。基本上,我的问题是:更喜欢哪种方法:

代码语言:javascript
复制
private void SynchronizedWorker()
    {
        // Sync loop
        while (!_shouldStop)
        {
            using (var conn = new SqlConnection())
            {
                SyncOrchestrator orchestrator = new SyncOrchestrator();
                SqlSyncProviderProxy destinationProvider = new SqlSyncProviderProxy("TEST");
                SqlSyncProvider localProvider = new SqlSyncProvider("TEST", conn);
                // Set Providers
                orchestrator.LocalProvider = localProvider;
                orchestrator.RemoteProvider = destinationProvider;
                // Direction
                orchestrator.Direction = SyncDirectionOrder.UploadAndDownload;


                // Sync
                orchestrator.Synchronize();
            }


            // wait for next interval or being woken up
            if (_syncWaitEvent.WaitOne(10000))
            {
                // we have been signaled prior to the timeout expiring
                _syncForce = false;
            }
        }
    }

或者这个

代码语言:javascript
复制
SqlConnection conn;
    SyncOrchestrator orchestrator = new SyncOrchestrator();
    SqlSyncProviderProxy destinationProvider = new SqlSyncProviderProxy("TEST");
    SqlSyncProvider localProvider = new SqlSyncProvider("TEST", conn);

    private void SynchronizedWorker2()
    {
        conn = new SqlConnection();
        orchestrator = new SyncOrchestrator();
        destinationProvider = new SqlSyncProviderProxy("TEST");
        localProvider = new SqlSyncProvider("TEST", conn);
        // Set Providers
        orchestrator.LocalProvider = localProvider;
        orchestrator.RemoteProvider = destinationProvider;
        // Direction
        orchestrator.Direction = SyncDirectionOrder.UploadAndDownload;

        // Sync loop
        while (!_shouldStop)
        {
            // Sync
            orchestrator.Synchronize();

            // wait for next interval or being woken up
            if (_syncWaitEvent.WaitOne(10000))
            {
                // we have been signaled prior to the timeout expiring
                _syncForce = false;
            }
        }
    }

为每次同步创建新对象似乎是更干净的方法。但当然,它的cpu时间稍微多一点。

你认为如何?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-18 15:34:01

我所做的是使用相同的Orchestrator进行同步,但在两种情况下,我将处理对象(并在需要时重新创建):

  • 发生错误
  • 申请正在退出。

我觉得这是该走的路。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20614124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档