我有一個通過 redis pub/sub 傳來的東西,我需要將它分發到多個 websocket 連接,所以基本上每當訊息來自 redis 時,它都需要通過所有 websockets 連接分發。
我想要多個消費者。他們每個人都應該得到所有的訊息。
var channel = Channel.CreateBounded<int>(new BoundedChannelOptions(1)
{
FullMode = BoundedChannelFullMode.Wait,
SingleReader = false
});
var cts = new CancellationTokenSource();
var producer = Task.Run(async () =>
{
int i = 0;
while (!cts.IsCancellationRequested)
{
channel.Writer.TryWrite(i );
await Task.Delay(TimeSpan.FromMilliseconds(250));
}
});
var readerOneTask = Task.Run(async () =>
{
await foreach (var i in channel.Reader.ReadAllAsync())
{
Console.WriteLine($"Reader one: {i}");
}
});
var readerTwoTask = Task.Run(async () =>
{
await foreach (var i in channel.Reader.ReadAllAsync())
{
Console.WriteLine($"Reader two: {i}");
}
});
cts.CancelAfter(TimeSpan.FromSeconds(5));
Console.ReadLine();
uj5u.com熱心網友回復:
單個Channel<T>不能向多個消費者廣播訊息。每次從通道中讀取訊息時,都會消費該訊息,并且沒有其他消費者會得到它。如果您想向所有消費者廣播所有訊息,則必須為Channel<T>每個消費者創建一個專用訊息。
您可能會發現這個問題很有趣:IAsyncEnumerable 或 IAsyncEnumerator 的工廠。它顯示了為序列實作源/控制器的各種方法IAsyncEnumerable<T>,包括通道和 Rx 主題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/485371.html
標籤:C# 。网 system.threading.channels
上一篇:如何使用HttpClientFactory在基地址末尾添加字串值?
下一篇:Perlfor批量回圈迭代
