通过渠道进行状态管理

问题描述

我目前正在使用Channels构造(例如go例程)来管理多线程状态同步。

我很好奇关于如何使用该通道处理状态管理的不同操作的最佳实践。一种操作是检索,另一种操作是从磁盘重新加载该状态。

在使用带有单个参数支持这些通道的单个通道来支持多个操作时,我感到相当多的摩擦和复杂性。特别支持该通道内每个操作决策路径中的不同返回类型和转换。

有人可以推荐其他方法吗?还是这个概念足够?

这是一个例子:


private static readonly Dictionary<string,OmaObject> State = new Dictionary<string,OmaObject>(); 
private static readonly ISpookyHashV2 SpookyHashV2 = SpookyHashV2Factory.Instance.Create();

 public static ChannelReader<T> CreateScheduleMessenger<T>(ChannelReader<T> channelReader,Command command)
        {
            var output = Channel.CreateUnbounded<T>();
            
            Task.Run(async () =>
            {
                
                if (command is Command.Get)
                {
                        var raw = await channelReader.ReadAsync();
                        OmaObject omaObject = (OmaObject)Convert.ChangeType(raw,typeof(OmaObject));

                        var hash = SpookyHashV2.ComputeHash($"{omaObject.Customer}{omaObject.Device}{omaObject.TestName}").AsBase64String();
                        if (!State.ContainsKey(hash))
                            State.Add(hash,omaObject);

                        Console.WriteLine($"Schedule state count: {State.Count}");
                        await output.Writer.WriteAsync((T)omaObject);

                    
                } else if (command is Command.Delete)
                {
                        var omaObject = await channelReader.ReadAsync();
                        State.Clear();
                        Console.WriteLine($"State has been cleaned: {State.Count}");

                        await output.Writer.WriteAsync(true);
                        
                }
            
            });
            
            output.Writer.Complete();

            return output;
 }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)