//Многопоточная конвертации партии .qsh файлов private void ConvertPart(List <string> files) { var array = new Task[files.Count]; for (int i = 0; i < files.Count; i++) { var file = files[i]; array[i] = new Task((() => { try { var totalList = new List <List <Trade> >(); if (_sourceDataType == SourceDataType.OrderLog) { totalList = OrdLogReader(file); } if (_sourceDataType == SourceDataType.Deals) { totalList.Add(DealsReader(file)); } foreach (var list in totalList) { if (list.Count > 1) { var sec = list[0].Security; _storage.Save(list, sec); for (int j = 0; j < _timeFrames.Count; j++) { var tf = _timeFrames[j]; using (var createCandle = new CandleBuilder(tf)) { var candles = createCandle.Build(list); _storage.Save(candles, tf, sec); } } list.Clear(); } } lock (_lock) Progress(); } catch (Exception e) { Exception?.Invoke(e.ToString()); } })); } foreach (var task in array) { task.Start(); } Task.WaitAll(array); }