private void StoreHashAndSaveData <T>(FileInfo fileInfo, WorkTask workTask, T[] data) { string fileName = fileInfo.FullName; string msg = "вычисление контрольной-суммы файла ..."; workTask.UpdateStatus(msg); workTask.IsIndeterminate = true; string hashAsString = string.Empty; bool isOk = false; byte numberOfRetries = 1; do { try { hashAsString = this.CalculateSHA256(fileName); isOk = true; } catch (IOException ex) { this.callBackAction(ex); workTask.UpdateStatus(string.Format("{0}\nфайл используется другим процессом, попытка #{1}", msg, numberOfRetries)); Task.Delay(1_000); } numberOfRetries++; } while (isOk == false); DataFileRecord dataFileRecord = new DataFileRecord(fileName, hashAsString, fileInfo.LastWriteTime); if (this.dataFilesInfo.ContainsKey(fileName)) { this.dataFilesInfo[fileName] = dataFileRecord; } else { this.dataFilesInfo.Add(fileName, dataFileRecord); } string cachedFileName = this.GetDbTableNamePath(fileName); _ = this.SerializeDataAsync <T>(data, cachedFileName); }