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);
        }