我正在开发一个 .net core 3.0 Web 应用程序,并决定在单例服务中使用 System.Threading.Channels。我的作用域请求服务的顶层注入这个单例来访问它的通道。
我决定使用这种模式将请求(为其他连接的客户端生成实时更新)与这些更新的执行分离。
在对象中实现 ONE 通道有很多例子。
谁能告诉我在我的单身人士中使用多个频道是否可能/可取?
创建多个通道并在创建单例时“启动”它们,我还没有遇到任何问题。我还没有达到可以测试多个客户端请求在单例上访问不同通道以查看它是否运行良好的地步。(或者根本没有?...)
我使用多个频道的主要动机是我希望单例根据频道中项目的类型做不同的事情。
public class MyChannelSingleton
{
public Channel<MyType> TypeOneChannel = Channel.CreateUnbounded<MyType>();
public Channel<MyOtherType> TypeTwoChannel = Channel.CreateUnbounded<MyOtherType>();
public MyChannelSingleton()
{
StartChannels();
}
private void StartChannels()
{
// discarded async tasks due to calling in ctor
_ = StartTypeOneChannel();
_ = StartTypeTwoChannel();
}
private async Task StartTypeOneChannel()
{
var reader = TypeOneChannel.Reader;
while (await reader.WaitToReadAsync())
{
if (reader.TryRead(out MyType item))
{
// item is sucessfully read from channel
}
}
}
private async Task StartTypeTwoChannel()
{
var reader = TypeTwoChannel.Reader;
while (await reader.WaitToReadAsync())
{
if (reader.TryRead(out MyOtherType item))
{
// item is sucessfully read from channel
}
}
}
}
我还希望永远不要“完成”这些渠道,并让它们在应用程序的整个生命周期内都可用。