我正在try System.Threading.Channels
个.我注意到限制功能并不像记录的那样起作用.这是一个非常简单的例子:
public class Example
{
private readonly Channel<int> queue = Channel.CreateBounded<int>(1);
public void Produce()
{
ChannelWriter<int> writer = queue.Writer;
Console.WriteLine("Writing first value...");
writer.WriteAsync(7);
Console.WriteLine("Writing second value...");
writer.WriteAsync(13);
Console.WriteLine("Finishing writing...");
writer.Complete();
}
public async Task Consume()
{
await Task.Delay(5000);
ChannelReader<int> reader = queue.Reader;
await foreach (int value in reader.ReadAllAsync())
Console.WriteLine(value);
Console.WriteLine("Done...");
}
}
以下是我如何运行它:
var item = new Example();
var task1 = Task.Run(() => item.Produce());
var task2 = Task.Run(() => item.Consume());
Task.WaitAll(task1, task2);
这是我得到的结果:
Writing first value...
Writing second value...
Finishing writing...
7
Done...
Channel的编写者应该等待处理第一个值.但它反而失go 了第二个价值. 你能帮助我了解我错过了什么吗?