/// <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); } } }
/// <summary> /// 初始化异步队列 /// </summary> private void InitAsyncQueue(DwonloadEntity item) { MeterInfo info = new MeterInfo(); info.entity = item; DownloadFile(item); AsyncQueues.Enqueue(new MeterAsyncQueue() { MeterInfoTask = info }); }