Ejemplo n.º 1
0
        /// <summary>
        /// Cancel all work items using thread abortion
        /// </summary>
        /// <param name="abortExecution">True to stop work items by raising ThreadAbortException</param>
        public override void Cancel(bool abortExecution)
        {
            _canceledSmartThreadPool.IsCanceled = true;
            _canceledSmartThreadPool            = new CanceledWorkItemsGroup();

            ICollection workItemsGroups = _workItemsGroups.Values;

            foreach (WorkItemsGroup workItemsGroup in workItemsGroups)
            {
                workItemsGroup.Cancel(abortExecution);
            }

            if (abortExecution)
            {
                foreach (ThreadEntry threadEntry in _workerThreads.Values)
                {
                    WorkItem workItem = threadEntry.CurrentWorkItem;
                    if (null != workItem &&
                        threadEntry.AssociatedSmartThreadPool == this &&
                        !workItem.IsCanceled)
                    {
                        threadEntry.CurrentWorkItem.GetWorkItemResult().Cancel(true);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public override void Cancel(bool abortExecution)
        {
            this._canceledSmartThreadPool.IsCanceled = true;
            this._canceledSmartThreadPool            = new CanceledWorkItemsGroup();
            ICollection values = this._workItemsGroups.Values;

            foreach (WorkItemsGroup workItemsGroup in values)
            {
                workItemsGroup.Cancel(abortExecution);
            }
            if (abortExecution)
            {
                foreach (SmartThreadPool.ThreadEntry current in this._workerThreads.Values)
                {
                    WorkItem currentWorkItem = current.CurrentWorkItem;
                    if (currentWorkItem != null && current.AssociatedSmartThreadPool == this && !currentWorkItem.IsCanceled)
                    {
                        current.CurrentWorkItem.GetWorkItemResult().Cancel(true);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public override void Cancel(bool abortExecution)
        {
            lock (_lock)
            {
                _canceledWorkItemsGroup.IsCanceled = true;
                _workItemsQueue.Clear();
                _workItemsInStpQueue = 0;
                _canceledWorkItemsGroup = new CanceledWorkItemsGroup();
            }

            if (abortExecution)
            {
                _stp.CancelAbortWorkItemsGroup(this);
            }
        }