先貼一個代碼
class Program { static void Main(string[] args) { var channels = Channel.CreateBounded<Mail>(2); var mail1 = new Mail(1, $"Message #{1}"); var mail2 = new Mail(2, $"Message #{1}"); var mail3 = new Mail(3, $"Message #{1}"); var mail4 = new Mail(4, $"Message #{1}"); var mail5 = new Mail(5, $"Message #{1}"); var mail6 = new Mail(6, $"Message #{1}"); var b0 = channels.Writer.TryWrite(mail1); b0 = channels.Writer.TryWrite(mail2); b0 = channels.Writer.TryWrite(mail3); b0 = channels.Writer.TryWrite(mail4); b0 = channels.Writer.TryWrite(mail5); b0 = channels.Writer.TryWrite(mail6); Mail mail; var b1 = channels.Reader.TryRead(out mail); b1 = channels.Reader.TryRead(out mail); b1 = channels.Reader.TryRead(out mail); b1 = channels.Reader.TryRead(out mail); b1 = channels.Reader.TryRead(out mail); b1 = channels.Reader.TryRead(out mail); Console.WriteLine("Hello World!"); } } public class Mail { public Mail(int id, string content) { Id = id; Content = content; } public int Id { get; } public string Content { get; } }
Channel 通道的意思
Writer寫入對象后會保存起來,等到reader 讀取后就消費掉, 寫入讀取按照隊列的形式,即 先寫的先讀取
CreateBounded 可以做一些設置,設置大小個數 ,如上述 Channel.CreateBounded<Mail>(2);
CreateUnbounded 無限制 Channel.CreateUnbounded<Mail>();
待續
