首页 > 编程语言 >C# 队列的一些并发模拟

C# 队列的一些并发模拟

时间:2024-11-08 08:47:57浏览次数:5  
标签:C# void System private Queue 队列 并发模拟 var using

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Collections.Concurrent;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private Queue<String> _Queue = new Queue<String>(100000);
        private ConcurrentQueue<String> _Queue2 = new ConcurrentQueue<String>();
        private bool _Enable = false;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            _Enable = true;
            ThreadPool.QueueUserWorkItem(o => { WriteQueue2(); }, null);
            ThreadPool.QueueUserWorkItem(o => { WriteQueue2(); }, null);
            ThreadPool.QueueUserWorkItem(o => { WriteQueue2(); }, null);
            ThreadPool.QueueUserWorkItem(o => { ReadQueue2(); }, null);
            ThreadPool.QueueUserWorkItem(o => { ReadQueue2(); }, null);
        }
        private void ReadQueue()
        {
            while (_Enable)
            {
                try
                {
                    Console.WriteLine("Find...");
                    var guid = Guid.NewGuid().ToString();
                    var fIt = _Queue.FirstOrDefault(ent => ent == guid);
                    if (fIt != null)
                    {
                        Console.WriteLine("Shit!");
                    }
                    //Thread.Sleep(10);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("ReadQueue:" + ex.Message);

                }
            }
        }
        private void WriteQueue()
        {
            var rnd = new Random();
            while (_Enable)
            {
                var r = rnd.Next(0, 100);
                if (r > 50)
                {
                    for (int i = 0; i < 50; i++)
                    {
                        _Queue.Enqueue(Guid.NewGuid().ToString());
                    }
                }
                else
                {
                    if (_Queue.Count >= 200)
                    {
                        for (int i = 0; i < 100; i++)
                        {
                            _Queue.Dequeue();
                        }
                    }
                }
                Console.WriteLine("Queue.Count:" + _Queue.Count);
                //Thread.Sleep(10);
            }
        }

        private void ReadQueue2()
        {
            while (_Enable)
            {
                try
                {
                    Console.WriteLine("Find...");
                    var guid = Guid.NewGuid().ToString();
                    var fIt = _Queue2.FirstOrDefault(ent => ent == guid);
                    if (fIt != null)
                    {
                        Console.WriteLine("Shit!");
                    }
                    //Thread.Sleep(10);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("ReadQueue:" + ex.Message);

                }
            }
        }
        private void WriteQueue2()
        {
            var rnd = new Random();
            while (_Enable)
            {
                var r = rnd.Next(0, 100);
                if (r > 50)
                {
                    for (int i = 0; i < 50; i++)
                    {
                        _Queue2.Enqueue(Guid.NewGuid().ToString());
                    }
                }
                else
                {
                    if (_Queue2.Count >= 200)
                    {
                        for (int i = 0; i < 100; i++)
                        {
                            string outIt=null;
                            _Queue2.TryDequeue(out outIt);
                        }
                    }
                }
                Console.WriteLine("Queue.Count:" + _Queue2.Count);
                //Thread.Sleep(10);
            }
        }

        private void NewMethod()
        {
            var frm = new Form2();
            frm.Text = Guid.NewGuid().ToString();
            frm.Show();

            MessageBox.Show(this, "xxx", "x", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);
            Console.WriteLine("xxx");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            var pinfo = new PInfo();
            var s = pinfo.ToString();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            _Enable = false;
        }
    }

}
View Code

采用ConcurrentQueue后未发现 FirstOrDefault方法时报错

标签:C#,void,System,private,Queue,队列,并发模拟,var,using
From: https://www.cnblogs.com/wdfrog/p/18534364

相关文章

  • C++总结
    目录一、面向对象的三大特性二、引用2.1概念2.2特性三、类与对象3.1概念3.2类的内容3.3对象的创建四、构造函数与析构函数五、封装六、继承6.1概念与基础使用6.2继承权限6.2.1权限修饰符6.2.2继承权限6.3构造函数6.3.1派生类与基类的构造函数关系6.3......
  • 移动Web前端高效开发实战:HTML 5 + CSS 3 + JavaScript + Webpack + React Native + Vu
    书:pan.baidu.com/s/1tIHXj9HmIYojAHqje09DTA?pwd=jqsoHTML5新特性与应用:介绍HTML5的新特性,包括语义化标签、本地存储、设备兼容、连接特性等,并讲解如何在移动Web前端开发中充分利用这些特性提升用户体验。CSS3样式与动画设计:详细讲解CSS3的样式设计和动画效果,包括选择器、盒......
  • .msc 是 Microsoft Management Console (MMC) 的管理单元文件扩展名,它通常用于存储管
    .msc是MicrosoftManagementConsole(MMC)的管理单元文件扩展名,它通常用于存储管理工具的配置和界面信息。MSC文件本质上是一个预设的管理工具,它包含了一些可以用来管理和配置Windows操作系统、网络、硬件等资源的界面和功能。简单来说,.msc文件是Windows系统中的管理工......
  • SpringBoot操作Excel实现单文件上传、多文件上传、下载、读取内容等功能
    @目录项目整体描述页面图简介:功能概括说明具体功能举例代码介绍首页index.html操作成功跳转hello.html首页跳转index.html代码方法1:读取指定的Excel方法2:读取上传的Excel里面的内容方法3:java单文件导入Excel,保存到target的目录下方法4:java多文件导入Excel,保存到target的目录下方......
  • LeetCode HOT 100 记录
    目录230.二叉搜索树中第K小的元素-力扣(LeetCode)199.二叉树的右视图-力扣(LeetCode)230.二叉搜索树中第K小的元素-力扣(LeetCode)相当于把二叉搜索树从小到大排序,而二叉搜索树有一个特点,就是顺序左子树<根节点<右子树,因此可以考虑使用中序遍历/***Definitionfo......
  • 【Simulink仿真】新能源电动汽车VCU,BMS hil硬件在环仿真测试电动汽车模型
    摘要本文基于Simulink平台构建了新能源电动汽车控制器硬件在环(Hardware-in-the-Loop,HIL)仿真测试系统。该系统包含整车控制器(VehicleControlUnit,VCU)与电池管理系统(BatteryManagementSystem,BMS)的仿真模型。通过搭建仿真环境,对VCU和BMS进行实时交互测试,验证控制策略......
  • FootyForecast足球数据预测软件——XGBoost算法实战
    足球数据分析——XGBoost算法实战基于上数据分析的AI足球大模型预测平台,感兴趣的可以下载。足球预测专家推荐链接:http://lcsjfx.com/FootyForecast/DownLoad随着足球数据的日益丰富,数据分析在足球领域的应用也越来越广泛。其中,XGBoost算法作为一种高效、强大的机器......
  • 一篇帮你搞懂ECharts图表构建
    目录一、引入 主要功能和应用场景:完全版本:二、一个实例 1.大框架2.设置大标题3.设置提示标签4.设置每个柱形数据的背景颜色5.设置柱形数据背景边框6.设置图例小角标7.拖拽手柄8.设置X轴9.设置Y轴10.设置数据11.设置边框完整版本:一、引入 ‌ECharts‌是......
  • 商品链接查询淘宝商品信息接口,淘宝天猫宝贝信息采集、淘宝商品历史最低价格数据接口、
    商品链接查询淘宝商品信息接口,淘宝天猫宝贝信息采集、淘宝商品历史最低价格数据接口、优惠信息数据、单日领券销量最高销量数据接口,淘宝联盟ck延期方案|接口+html前端UI界面PHP完整代码:<?php//定义API接口地址和参数$apiUrl="https://api.taolale.com/api/Tb_union......
  • Pytorch用BERT对CoLA、新闻组文本数据集自然语言处理NLP:主题分类建模微调可视化分析-C
     原文链接:https://tecdat.cn/?p=38181原文出处:拓端数据部落公众号自然语言处理(NLP)领域在近年来发展迅猛,尤其是预训练模型的出现带来了重大变革。其中,BERT模型凭借其卓越性能备受瞩目。然而,对于许多研究者而言,如何高效运用BERT进行特定任务的微调及应用仍存在诸多困惑。本文......