示例#1
0
        private void TryUpdateAddressBook(AddressBookLocal addressBook)
        {
            UpdateTask updateTask = null;

            using (new ResourceCriticalOperation(addressBook))
                updateTask = CreateTask(addressBook);

            if (updateTask != null)
            {
                var worker = new Task(StartUpdateTask, updateTask, TaskCreationOptions.PreferFairness);
                worker.Start();
            }
        }
示例#2
0
        private UpdateTask CreateTask(AddressBookLocal addressBook)
        {
            Logger.LogNotice(string.Format("Trying to update address book '{0}'.Last update: {1}.", addressBook.Name, addressBook.LastUpdate));
            using (new ResourceCriticalOperation((object)_tasks))
            {
                for (int i = 0; i < MAX_PARALLEL_TASKS_COUNT; i++)
                {
                    if (_tasks[i] == null)
                    {
                        var task = new UpdateTask(_contactsManager, _contactsManager.SqlConnection, addressBook, i);
                        _tasks[i] = task;

                        Logger.LogNotice(string.Format("Found empty slot to perform update for '{0}'.", addressBook.Name));

                        return(task);
                    }
                }
            }

            return(null);
        }