/// <summary> /// Starts processes to capture network data for all available devices /// </summary> protected void StartNetworkDataCapture() { captureResetEvent.Set(); var devices = CaptureDeviceList.Instance; foreach (var device in devices) { if (isAdvancedLogEnabled) { LogProvider.Log.Info(this, $"Found device: {device.Name}, {device.Description}. [{SiteString}]"); } try { device.Open(DeviceMode.Normal); var captureDevice = new CaptureDevice(device) { IsOpened = true }; captureDevices.Push(captureDevice); } catch (Exception e) { LogProvider.Log.Error(this, $"Failed to open device {device.Name}. [{SiteString}]", e); } } captureDevices.ForEach(captureDevice => Task.Run(() => CaptureData(captureDevice))); }
public void Test() { ConcurrentStack<int> stack = new ConcurrentStack<int>(); stack.ForEach(i => Console.WriteLine(i)); Console.WriteLine("---------------"); CountDownLatch mutex = new CountDownLatch(20); for (int i = 1; i <= mutex.Count; i++) { ThreadPool.QueueUserWorkItem((state) => { stack.Push((int)state); mutex.CountDown(); }, i); } mutex.Await(); stack.ForEach(i => Console.WriteLine(i)); }
public void Test() { ConcurrentStack <int> stack = new ConcurrentStack <int>(); stack.ForEach(i => Console.WriteLine(i)); Console.WriteLine("---------------"); CountDownLatch mutex = new CountDownLatch(20); for (int i = 1; i <= mutex.Count; i++) { ThreadPool.QueueUserWorkItem((state) => { stack.Push((int)state); mutex.CountDown(); }, i); } mutex.Await(); stack.ForEach(i => Console.WriteLine(i)); }
private void InternalRegisterDependencies(IServiceContainer container) { // Регистрирую общие зависимости _listOfNativeDependencies.ForEach(t => { try { //смотрим по атрибуту, с каким временем жизни надо регистрировать тип var registerAttr = t.GetCustomAttribute <RegisterAttribute>(false); var lifetime = registerAttr?.Lifetime ?? RegisterAttribute.DefaultLifetime; //получаем интерфейс для регистрации Type serviceType = registerAttr?.ServiceType; //Регистрируем от интерфейса if (serviceType != null) { container.Register(serviceType, t, _lifetimeDict[lifetime]()); } else { // Регестрируем сервисы как реализацию интерфейсов от которых они унаследованы t.GetInterfaces() .Where(i => !(i == typeof(IDependency) || i == typeof(IDisposable) || i == typeof(IValidator))) .ForEach(i => { // Проверка по равенству наименований интерфейса и класса наслединка // Пример - Интерфейс: ISomeLogic, Имя класса: SomeLogic if (i.Name.StartsWith("I") && i.Name.Substring(1) == t.Name) { container.Register(i, t, _lifetimeDict[lifetime]()); } } ); } //регистрирую как самого себя в любом случае container.Register(t, _lifetimeDict[lifetime]()); } catch (Exception ex) { // Не удалось зарегистрировать один из типов Debug.WriteLine($"{typeof(LegacyServiceBase).Namespace}\r\n{ex}"); } }); // Регистрирую частные зависимости _listOfCustomDependencies .ForEach(mi => { try { mi.Invoke(null, new object[] { container }); } catch (Exception exception) { // Не удалось исполнить частную регистрацию типа Debug.WriteLine($"{typeof(LegacyServiceBase).Namespace}\r\n{exception}"); } }); // Регистрирую Automapper try { var mapper = CreateMapper(_listOfMapperProfiles); container.RegisterInstance(mapper); } catch (Exception ex) { // Не удалось зарегистрировать Automapper Debug.WriteLine($"{typeof(LegacyServiceBase).Namespace}\r\n{ex}"); } //Регистрирую логгер try { container.Register(typeof(Logger <>)); } catch (Exception ex) { // Не удалось зарегистрировать логгер Debug.WriteLine($"{typeof(LegacyServiceBase).Namespace}\r\n{ex}"); } //регистрирую кэши _listOfCaches.ForEach(t => { try { //каждый кэш - синглтон. За счет этого механизм автообновления (реализуемый в провайдере) всегда может получить доступ к кэшу. //ps. todo: с этим можно поспорить, так что тут есть что еще обсудить.. container.Register(t, new PerContainerLifetime()); } catch (Exception ex) { // Не удалось зарегистрировать один из типов Debug.WriteLine($"{typeof(LegacyServiceBase).Namespace}\r\n{ex}"); } }); }