怪物奇妙物语

宇宙无敌超级美少男的怪物奇妙物语

首页 新随笔 联系 管理
  819 随笔 :: 0 文章 :: 2 评论 :: 16万 阅读

回调函数 事件处理 dotnet .net 有界队列 背压机制(Backpressure)有界队列

通过有界队列来实现背压,确保生产者不会以超过消费者处理能力的速度发送数据。

using System.Threading.Channels;
public class Program
{
static async Task Main(string[] args)
{
// 创建一个有界的消息队列,设置最大容量为5
BoundedChannelOptions options = new BoundedChannelOptions(5)
{
FullMode = BoundedChannelFullMode.Wait, // 当队列满时,生产者等待
SingleReader = true, // 该通道只有一个消费者
SingleWriter = true // 该通道只有一个生产者
};
Channel<string> channel = Channel.CreateBounded<string>(options);
// 启动消费者任务
Task consumerTask = ConsumeMessagesAsync(channel.Reader);
// 模拟生产者,尝试发送一些消息到队列
while (true)
{
string? v = System.Console.ReadLine();
if (!string.IsNullOrEmpty(v))
{
if (v == "q")
{
channel.Writer.Complete();
await consumerTask;
break;
}
await WriteMessageAsync(channel.Writer, v);
// Console.WriteLine($"Produced: {v}");
}
}
}
static async Task ConsumeMessagesAsync(ChannelReader<string> reader)
{
while (await reader.WaitToReadAsync())
{
while (reader.TryRead(out string item))
{
Console.WriteLine($"Consumed: {item}");
await Task.Delay(100); // 模拟处理时间
}
}
}
static async Task WriteMessageAsync(ChannelWriter<string> writer, string message)
{
await writer.WriteAsync(message); // 生产者会在这里等待,直到有空间可用
}
}
posted on   超级无敌美少男战士  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
历史上的今天:
2024-01-23 dotnet注册服务 secs4net secs
2024-01-23 dotnet 扩展Service方法 secs4net
2024-01-23 csharp 扩展方法
2022-01-23 tampermonkey 油猴脚本 博客园美化
点击右上角即可分享
微信分享提示