我正在使用Microsoft Sync Framework,并且每隔10秒就通过WCF服务进行同步。在某些系统上,我遇到了奇怪的SemaphoreFullExceptions,所以我试图重构这个同步背景线程。 基本上我的问题是:更喜欢什么方法:
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;
}
}
}
或者
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;
}
}
}
为我创建每个同步的新对象似乎是更清洁的方法。但当然它的成本会略高一些。
您怎么看?
答案 0 :(得分:0)
我所做的是使用相同的Orchestrator进行同步,但在两种情况下我处理对象(并在需要时重新创建):
认为这是要走的路......