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

c# channel

作者:ι错过了   发布日期:2026-03-02   浏览:105

using System;
using System.Threading.Tasks;
using System.Threading.Channels;

class Program
{
    static async Task Main(string[] args)
    {
        // 创建一个无缓冲的通道 (Channel)
        Channel<int> channel = Channel.CreateUnbounded<int>();

        // 启动一个生产者任务
        Task producer = Task.Run(async () =>
        {
            for (int i = 0; i < 10; i++)
            {
                await channel.Writer.WriteAsync(i);
                Console.WriteLine($"Produced: {i}");
                await Task.Delay(100); // 模拟一些延迟
            }
            channel.Writer.Complete(); // 完成写入
        });

        // 启动一个消费者任务
        Task consumer = Task.Run(async () =>
        {
            while (await channel.Reader.WaitToReadAsync())
            {
                while (channel.Reader.TryRead(out int item))
                {
                    Console.WriteLine($"Consumed: {item}");
                    await Task.Delay(200); // 模拟处理时间
                }
            }
        });

        // 等待生产者和消费者完成
        await Task.WhenAll(producer, consumer);
    }
}

解释说明

  1. 创建通道

    • Channel<int> channel = Channel.CreateUnbounded<int>(); 创建了一个无缓冲的整数通道。你可以选择使用有界通道 (Channel.CreateBounded<T>(options)) 来限制通道中的项数。
  2. 生产者

    • 使用 Task.Run 启动一个异步任务来模拟生产者。
    • 生产者通过 await channel.Writer.WriteAsync(i) 将数据写入通道,并在每次写入后打印日志。
    • 写入完成后调用 channel.Writer.Complete() 标记写入操作已完成。
  3. 消费者

    • 使用 Task.Run 启动另一个异步任务来模拟消费者。
    • 消费者通过 await channel.Reader.WaitToReadAsync() 等待通道中有可用的数据,然后使用 channel.Reader.TryRead(out int item) 读取数据并处理。
    • 每次读取后打印日志,并模拟处理时间。
  4. 等待完成

    • 使用 await Task.WhenAll(producer, consumer) 等待生产者和消费者任务都完成。

这个示例展示了如何使用 C# 的 Channel 类来进行生产者-消费者模式的异步通信。

上一篇:c#指针

下一篇:c#时间戳转换日期格式输出

大家都在看

c# 二进制

c# 创建目录

c# datatable group by

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

.net和c#

c#获取系统时间

c#游戏开发

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

Laravel 中文站