Channel 实战:WinForms 中的生产者-消费者模式
private async void button1_Click(object sender, EventArgs e)
{
await TestChannelAsync();
}
private async Task TestChannelAsync()
{
var channel = Channel.CreateUnbounded<int>();
var t = Task.Run(async () =>
{
for (int i = 0; i < 100; i++)
{
await Task.Delay(TimeSpan.FromMilliseconds(50));
BeginInvoke(() =>
{
textBox2.Text = i.ToString();
progressBar1.Value = i;
});
await channel.Writer.WriteAsync(i);
//if (i > 7)
//{
// channel.Writer.Complete();
// break;
//}
}
channel.Writer.Complete();
});
var c = Task.Run(async () =>
{
await foreach (var item in channel.Reader.ReadAllAsync())
{
BeginInvoke(new Action(() =>
{
textBox1.Text = item.ToString();
}));
}
BeginInvoke(new Action(() =>
{
textBox1.Text = "done";
}));
});
// 等待生产者和消费者都完成
await Task.WhenAll(t, c);
lbinfo.Text = "mission success!";
}
运行示意图:


浙公网安备 33010602011771号