91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

c# blockingcollection怎樣實現生產者消費者模式

c#
小樊
81
2024-11-21 05:39:11
欄目: 編程語言

在C#中,BlockingCollection類可以很好地實現生產者消費者模式。它是一個線程安全的集合,可以在多個線程之間安全地傳遞數據。以下是一個簡單的示例:

首先,創建一個名為ProducerConsumerExample的類,并在其中定義兩個方法:ProduceConsume,分別用于生產數據和消費數據。

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

class ProducerConsumerExample
{
    private static BlockingCollection<int> _blockingCollection = new BlockingCollection<int>();

    static void Main(string[] args)
    {
        // 創建兩個任務,一個用于生產數據,另一個用于消費數據
        Task producerTask = Task.Run(() => Produce());
        Task consumerTask = Task.Run(() => Consume());

        // 等待兩個任務完成
        Task.WaitAll(producerTask, consumerTask);
    }

    static void Produce()
    {
        for (int i = 0; i < 10; i++)
        {
            Console.WriteLine($"Producing: {i}");
            _blockingCollection.Add(i);
            Thread.Sleep(1000); // 模擬生產過程耗時
        }

        // 生產完成后,通知消費者任務已完成
        Console.WriteLine("All items produced.");
        _blockingCollection.CompleteAdding();
    }

    static void Consume()
    {
        foreach (var item in _blockingCollection.GetConsumingEnumerable())
        {
            Console.WriteLine($"Consuming: {item}");
            Thread.Sleep(2000); // 模擬消費過程耗時
        }

        Console.WriteLine("All items consumed.");
    }
}

在這個示例中,我們使用了一個名為_blockingCollectionBlockingCollection<int>實例來存儲數據。Produce方法用于生產數據,將數據添加到BlockingCollection中。Consume方法用于消費數據,從BlockingCollection中獲取數據并處理。

BlockingCollection提供了CompleteAdding方法,當生產完成后調用此方法,可以通知消費者任務已完成。GetConsumingEnumerable方法返回一個可枚舉的序列,該序列會在BlockingCollection中有新元素時自動更新。這樣,消費者可以在有新數據時立即開始處理,而不需要不斷檢查是否有新數據。

Main方法中,我們創建了兩個任務,一個用于生產數據,另一個用于消費數據,并使用Task.WaitAll等待它們完成。

0
镇康县| 黄浦区| 略阳县| 海南省| 渭南市| 湖北省| 东海县| 崇礼县| 秦安县| 靖安县| 葵青区| 锦州市| 织金县| 手游| 邓州市| 花莲县| 保康县| 岫岩| 策勒县| 怀化市| 舟曲县| 博客| 顺昌县| 嵊州市| 宁海县| 怀宁县| 宣城市| 临沂市| 呼伦贝尔市| 常德市| 鄢陵县| 岢岚县| 永登县| 佛教| 新田县| 义乌市| 柯坪县| 铜鼓县| 日土县| 太湖县| 江永县|