C# 使用Unity容器时,线程之间不共享静态变量
我有以下课程C# 使用Unity容器时,线程之间不共享静态变量,c#,.net,multithreading,unity-container,C#,.net,Multithreading,Unity Container,我有以下课程 public static class EventHandlers { public static readonly BlockingCollection<SignalCommands.Commands> CommandsQueue = new BlockingCollection<SignalCommands.Commands>(); } 现在在入门课程(应用)中,我有以下几点 产生信号的类 Task.Run(()=>DependencyManag
public static class EventHandlers
{
public static readonly BlockingCollection<SignalCommands.Commands> CommandsQueue = new BlockingCollection<SignalCommands.Commands>();
}
现在在入门课程(应用)中,我有以下几点
产生信号的类
Task.Run(()=>DependencyManager.Current.Resolve().Start())代码>
接收信号的人
Task.Delay(TimeSpan.FromSeconds(1)).ContinueWith(t=>dependencManager.Current.Resolve().Start()).ContinueWith(_Task=>Utils.LogException(_Task,_logger))代码>
这是我的日志:
日志格式:日期|级别|线程ID |类|消息
2020/02/13 16:09:32.603|DEBUG|4|CommandHandler|Adding signal to queue ..
2020/02/13 16:09:32.603|DEBUG|4|CommandHandler|Adding signal to queue ..
2020/02/13 16:09:33.882|DEBUG|10|TradesSynchronizer|Total signals count 2
2020/02/13 16:09:33.883|DEBUG|10|TradeService|Summary Total signals count 0`
TradeService被注入到TradesSynchronizer,但是正如您所看到的,两者都在同一个线程4上运行
这两个类的调用相同
_Debug(“总信号计数”+EventHandlers.CommandsQueue.count)
注意:没有从队列中读取/取出信号的实现,仅将其写入。使用unity Containers code posted发布您的代码!非常感谢您的帮助!使用静态字段或属性来共享状态是个坏主意,不管是DI还是no。当使用DI容器时,常用的方法是将提供该状态的“服务”注册为单例服务。但是,在代码中,您根本没有使用Unity作为DI容器,CommandsQueue
在哪里使用?在命令处理程序中
?可能是CommandHandler
有问题。例如,当多次调用Start()
时会发生什么情况。代码不干净,不工作,并且调试起来很难,因此您不得不在SO上发布一个问题。如果不知道如何使用commandsque
,或者CommandHandler做什么,就无法提供帮助。有一点是肯定的,即开箱即用类(数据流块、通道)工作没有问题。Unity不会影响运行时语义——它不会影响静态字段的行为
2020/02/13 16:09:32.603|DEBUG|4|CommandHandler|Adding signal to queue ..
2020/02/13 16:09:32.603|DEBUG|4|CommandHandler|Adding signal to queue ..
2020/02/13 16:09:33.882|DEBUG|10|TradesSynchronizer|Total signals count 2
2020/02/13 16:09:33.883|DEBUG|10|TradeService|Summary Total signals count 0`