0

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

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

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

有人可以推荐一些替代方法还是这个概念就足够了?

这是一个例子:


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;
 }
4

0 回答 0