c# 多线程执行队列任务

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp9
{
    class Program
    {
        static readonly Queue<int> rowQueue = new Queue<int>();
        static object objLock = new object();
        //读取队列 
        public static int GetRow()
        {
            int row = 0;

            lock (objLock)
            {
                if (IsRowAvailable)
                {
                    row = rowQueue.Dequeue();
                }
                return row;
            }
        }
        //只读属性,确定队列中是不是还有元素 
        public static bool IsRowAvailable
        {
            get
            {
                return rowQueue.Count > 0;
            }
        }
        static void Main(string[] args)
        {
            rowQueue.Clear();
            for (int i = 0; i < 1000; i++) {
                rowQueue.Enqueue(i);
            }
            Console.WriteLine("写入队列成功");
            int num = 5;
            var factory = new TaskFactory();
            var tasks = new Task[num];
            for (int i = 0; i < num; i++)
            {
                Task task = tasks[i];
                task = factory.StartNew(() =>
                {
                    Timer timer = new Timer((o) =>
                    {
                        if (IsRowAvailable)
                        {
                            int r = GetRow();
                            Console.WriteLine($"线程:{task.Id}取得值:{r}");
                        }
                    }, null,500, 1000);
                });
            }
            Console.ReadLine();
        }
}

 

posted @ 2021-05-29 10:42  拼博之路  阅读(1820)  评论(0编辑  收藏  举报