Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c# blockingcollection

作者:月下孤魂   发布日期:2026-01-05   浏览:104

using System;
using System.Collections.Concurrent;
using System.Threading;

class Program
{
    static void Main()
    {
        // 创建一个容量为5的BlockingCollection
        BlockingCollection<int> collection = new BlockingCollection<int>(5);

        // 启动一个生产者线程
        Thread producerThread = new Thread(() =>
        {
            for (int i = 0; i < 10; i++)
            {
                // 尝试添加元素到集合中,如果集合已满则阻塞
                collection.Add(i);
                Console.WriteLine($"Produced: {i}");
                Thread.Sleep(100); // 模拟生产时间
            }

            // 完成添加操作
            collection.CompleteAdding();
        });

        // 启动一个消费者线程
        Thread consumerThread = new Thread(() =>
        {
            while (!collection.IsCompleted)
            {
                try
                {
                    // 尝试从集合中取出元素,如果集合为空则阻塞
                    int item = collection.Take();
                    Console.WriteLine($"Consumed: {item}");
                    Thread.Sleep(150); // 模拟消费时间
                }
                catch (InvalidOperationException)
                {
                    // 当集合已完成并且为空时退出循环
                    break;
                }
            }
        });

        // 启动线程
        producerThread.Start();
        consumerThread.Start();

        // 等待线程结束
        producerThread.Join();
        consumerThread.Join();
    }
}

解释说明

  1. BlockingCollection 是 .NET 提供的一个线程安全的集合类,它可以在多线程环境中使用,支持阻塞和限流操作。
  2. 创建集合BlockingCollection<int> collection = new BlockingCollection<int>(5); 创建了一个容量为5的集合。
  3. 生产者线程:通过 Add 方法向集合中添加元素,当集合已满时,Add 方法会阻塞直到有空间可用。
  4. 消费者线程:通过 Take 方法从集合中取出元素,当集合为空时,Take 方法会阻塞直到有元素可用。
  5. CompleteAdding:当生产者完成添加所有元素后,调用 CompleteAdding 方法通知消费者不再会有新的元素加入。
  6. IsCompleted:消费者可以通过 IsCompleted 属性判断是否所有元素都已被消费完毕。

上一篇:c# configurationmanager

下一篇:c# 字符串包含

大家都在看

c# 二进制

c# datatable group by

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

.net和c#

c#获取系统时间

c#游戏开发

c#网络编程

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站