/// <summary> /// Method that refreshes the Cache by uploading all modified changes and then downloading the /// server changes. /// </summary> public void RefreshAsync() { if (this.IsBusy) { throw CacheControllerException.CreateCacheBusyException(); } this.refreshStats = new CacheRefreshStatistics(); this.StartAsyncWorkerManager(); // Enqueue an async operation this._asyncWorkManager.AddWorkRequest(new AsyncWorkRequest(RefreshWorker, RefreshWorkerCompleted, null)); }
/// <summary> /// Instantiates a new AsyncWorkerManager object that will be used for the current sync session /// </summary> void StartAsyncWorkerManager() { if (this._asyncWorkManager == null) { lock (this._lockObject) { if (this._asyncWorkManager == null) { this._asyncWorkManager = new AsyncWorkerManager(OnRefreshCancelled); this._controllerBehavior.Locked = true; // Reset Cancelled flag this.Cancelled = false; } else { // This means two different threads raced and called RefreshAsync which wasnt caught by the IsBusy check throw CacheControllerException.CreateCacheBusyException(); } } } }