Пример #1
0
 private void InternalEnqueue(ExecutionThread task)
 {
     _empty.Reset();
     Empty?.Invoke(false);
     _queuedTasks.Enqueue(task);
     PromoteTasks();
 }
Пример #2
0
        /// <summary>
        /// Создает и запускает новый поток.
        /// </summary>
        /// <param name="action">Код потока.</param>
        /// <param name="parameter">Параметр потока.</param>
        /// <returns>Объект ExecutionThread.</returns>
        public static ExecutionThread <T, R> StartNew <T, R>(Func <T, R> action, T parameter) where T : class
        {
            var p = new ExecutionThread <T, R>(action);

            p.Start(parameter);
            return(p);
        }
Пример #3
0
        /// <summary>
        /// Ставит в очередь задачу.
        /// </summary>
        /// <param name="action">Метод задачи.</param>
        /// <returns>Объект ExecutionThread.</returns>
        public ExecutionThread Enqueue(Action action)
        {
            var task = new ExecutionThread(action, this);

            Synchronous(p => p.InternalEnqueue(task));

            return(task);
        }
Пример #4
0
        /// <summary>
        /// Создает и запускает новый поток.
        /// </summary>
        /// <param name="action">Код потока.</param>
        /// <param name="priority"></param>
        /// <returns>Объект ExecutionThread.</returns>
        public static ExecutionThread StartNew(Action action, ThreadPriority priority)
        {
            var p = new ExecutionThread(action)
            {
                Priority = priority
            };

            p.Start();
            return(p);
        }
Пример #5
0
        /// <summary>
        /// Ставит в очередь задачу с входными и выходными данными.
        /// </summary>
        /// <typeparam name="T">Тип входных данных задачи.</typeparam>
        /// <typeparam name="R">Тип выходных данных задачи.</typeparam>
        /// <param name="action">Метод задачи.</param>
        /// <param name="parameter">Входные данные задачи.</param>
        /// <returns>Объект ExecutionThread.</returns>
        public ExecutionThread <T, R> Enqueue <T, R>(Func <T, R> action, T parameter) where T : class
        {
            var task = new ExecutionThread <T, R>(action, this)
            {
                Parameter = parameter
            };

            Synchronous(p => p.InternalEnqueue(task));

            return(task);
        }
Пример #6
0
        private void InternalUnregister(ExecutionThread task)
        {
            _activeTasks.Remove(task);

            if (null != task.Error)
            {
                _errors.Add(task.Error);
            }

            PromoteTasks();

            if (!_queuedTasks.Concat(_activeTasks).Any())
            {
                _empty.Set();
                Empty?.Invoke(true);
            }
        }
Пример #7
0
 internal void Unregister(ExecutionThread task)
 {
     Synchronous(p => p.InternalUnregister(task));
 }