如何解决通过渠道进行状态管理
我目前正在使用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 举报,一经查实,本站将立刻删除。