channel 通信的例子:
using ConsoleApp2;
using System.Collections.Concurrent;
using System.Threading.Channels;var queue = new BlockingCollection<Message>(new ConcurrentQueue<Message>());var opt = new BoundedChannelOptions(10)
{FullMode = BoundedChannelFullMode.Wait,SingleReader = true,SingleWriter = true,Capacity = 100 //最大容量
};//有限的
var channelTest = Channel.CreateBounded<Message>(opt);
//无限的
var channel = Channel.CreateUnbounded<Message>();var sender1 = SendMessageThreadAsync(channel.Writer, 1);
var sender2 = SendMessageThreadAsync(channel.Writer, 2);
var receiver1 = ReceiveMessageThreadAsync(channel.Reader, 3);
var receiver2 = ReceiveMessageThreadAsync(channel.Reader, 4);
//await sender;
// make sure all messages are receivedawait Task.WhenAll(sender1, sender2);channel.Writer.Complete();await Task.WhenAll(receiver1, receiver2);//await receiver;Console.WriteLine("Press any key to exit...");
Console.ReadKey();async Task SendMessageThreadAsync(ChannelWriter<Message> writer, int