Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Unity容器时,线程之间不共享静态变量_C#_.net_Multithreading_Unity Container - Fatal编程技术网

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`