Exemple #1
0
        /// <summary>
        /// 处理队列
        /// </summary>
        private void HandlingQueue()
        {
            CancellationToken token = tokenSource.Token;

            lock (_queueLock)
            {
                if (AsyncQueues.Count > 0)
                {
                    var asyncQueue = AsyncQueues.Dequeue();

                    if (asyncQueue == null)
                    {
                        return;
                    }
                    var task = Task.Factory.StartNew(() =>
                    {
                        if (token.IsCancellationRequested)
                        {
                            return;
                        }
                        //阻止当前线程
                        resetEvent.WaitOne();
                        //执行任务
                        Execute(asyncQueue.MeterInfoTask.entity);
                    }, token).ContinueWith(t =>
                    {
                        HandlingTask();
                    }, TaskContinuationOptions.OnlyOnRanToCompletion | TaskContinuationOptions.ExecuteSynchronously);
                    ParallelTasks.Add(task);
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// 初始化异步队列
        /// </summary>
        private void InitAsyncQueue(DwonloadEntity item)
        {
            MeterInfo info = new MeterInfo();

            info.entity = item;
            DownloadFile(item);
            AsyncQueues.Enqueue(new MeterAsyncQueue()
            {
                MeterInfoTask = info
            });
        }