问题描述
我目前正在使用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 (将#修改为@)