zoukankan      html  css  js  c++  java
  • 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();
            }
    }
  • 相关阅读:
    追随我心
    开心孕期创业经验和教训总结
    记和老友李吃饭
    如何理解hashCode的作用:
    周计划(2014.08.05~2014.08.10)
    个人职业提升内容
    个人职业发展分析和实现方法
    go 实现的排序算法
    xxx go内置函数
    6.并发
  • 原文地址:https://www.cnblogs.com/icejd/p/14824680.html
Copyright © 2011-2022 走看看