public async Task ReadValues(List <Item> items)
        {
            var threadGroup = items.First().ThreadGroup;

            while (true)
            {
                try
                {
                    foreach (Item item in items)
                    {
                        try
                        {
                            var collector = new ItemCollector(item);
                            await collector.ReadValue();

                            await Task.Delay(threadGroup.IntervalBetweenItems);
                        }
                        catch (Exception ex)
                        {
                            Logger.LogMonitoringServiceLibrary(ex);
                        }
                    }

                    await Task.Delay(threadGroup.IntervalBetweenCycle);
                }
                catch (Exception ex)
                {
                    Logger.LogMonitoringServiceLibrary(ex);
                }
            }
        }
        private void DoStart()
        {
            IndustrialMonitoringEntities Entities = null;

            try
            {
                Entities = new IndustrialMonitoringEntities();
                Items    = Entities.Items.ToList();
            }
            catch (Exception ex)
            {
                Logger.LogMonitoringServiceLibrary(ex);
            }

            foreach (var item in Items)
            {
                try
                {
                    if (item.ThreadGroupId == null)
                    {
                        ItemCollector itemCollector = new ItemCollector(item);
                        Thread        thread        = new Thread(() =>
                        {
                            itemCollector.ReadValueInfinite();
                        });
                        thread.Start();

                        ItemCollectors.Add(itemCollector);
                        Thread.Sleep(1);
                    }
                }
                catch (Exception ex)
                {
                    Logger.LogMonitoringServiceLibrary(ex);
                }
            }

            var groups = Items.GroupBy(x => x.ThreadGroup).Select(x => x.First());

            foreach (Item item in groups)
            {
                try
                {
                    if (item.ThreadGroupId != null & item.ThreadGroupId > 0)
                    {
                        var itemsInGroup = Entities.Items.Where(x => x.ThreadGroupId == item.ThreadGroupId).ToList();

                        Thread thread = new Thread(() =>
                        {
                            ReadValues(itemsInGroup);
                        });

                        thread.Start();
                    }
                }
                catch (Exception ex)
                {
                    Logger.LogMonitoringServiceLibrary(ex);
                }
            }

            this._serverStatus = ServerStatus.Run;
        }