コード例 #1
0
        public static void Execute()
        {
            LogManager.Log("Workers will run every " + WorkerSleepTimer + " milliseconds. Activating " + NumberofThreads + " threads");
            //set number of threads
            options.MaxDegreeOfParallelism = NumberofThreads;
            try
            {
                CachingAvailability.ResetTrackerTable();
            }
            catch (Exception ex)
            {
                LogManager.LogException(ex, "Error on ResetTrackerTable.", LogLevel.Error);
            }

            WorkerPropertyTimer.Elapsed += OnTimedEvent_StartPropertyWorkers;
            WorkerPropertyTimer.Interval = WorkerSleepTimer;
            WorkerPropertyTimer.Start();
        }
コード例 #2
0
        private static void OnTimedEvent_StartPropertyWorkers(object source, ElapsedEventArgs e)
        {
            try
            {
                LogManager.Log("Attempting to acquire lock.", LogLevel.Debug);

                lock (PropertyLock)
                {
                    if (_isPropertyWorkerRunning)
                    {
                        return;
                    }
                    else
                    {
                        _isPropertyWorkerRunning = true;
                    }
                }

                var propertiesToRefresh = new List <CacheAvailabilityTracker>();

                for (int i = 0; i < NumberofThreads; i++)
                {
                    var tracker = CachingAvailability.GetPropertyToRefresh();
                    tracker.AssignedWorker = "Property Worker: " + i;
                    propertiesToRefresh.Add(tracker);
                }

                Parallel.ForEach(propertiesToRefresh, options, Logical.PropertyWorker);

                lock (PropertyLock)
                {
                    _isPropertyWorkerRunning = false;
                }
            }
            catch (Exception ex)
            {
                LogManager.LogException("Timer tick failed", ex, LogLevel.Error);
                lock (PropertyLock)
                {
                    _isPropertyWorkerRunning = false;
                }
            }
        }