/// <summary> /// Loop for generate and add tasks for processing /// </summary> /// <returns>Task</returns> public async Task Run() { Task taskResult = null; try { taskResult = Task.Run(() => _taskQueue.GeneralLoop()); _taskQueue.AddTask(TaskWriteObjectToFile.GetInstance(StringSource.GetInstance($"Calc SHA256 for each block of file: {_fileSource.Name}"))); _taskQueue.AddTask(TaskWriteObjectToFile.GetInstance(StringSource.GetInstance(string.Empty))); while (!_fileSource.IsReadComplete()) { _taskQueue.AddTaskAsync(TaskCalcHashSha256.GetInstance()); } } catch (Exception ex) { Error = ex; } finally { _taskQueue.StopLoop(); try { await taskResult; } catch (Exception ex) { Error = ex; } _taskQueue.GetStatistics(out TimeSpan time, out Dictionary <string, int> stat); OnSendCompleted(new SignWorkerAsyncCompletedArgs(time, stat, Error, _taskQueue.Error)); } }
/// <summary> /// Function for read blocks from file and send its to process /// </summary> private void ThreadFunction() { try { WriteHeadersToResult(); while (!_fileSource.IsReadComplete() && _taskQueue.Error == null) { _taskQueue.AddTask(TaskCalcHashSha256.GetInstance()); } _taskQueue.StopQueue(); _taskQueue.WaitComplete(); } catch (Exception ex) { Error = ex; _taskQueue.StopQueue(); } finally { _taskQueue.GetStatistics(out TimeSpan time, out Dictionary <string, long> stat); OnSendCompleted(new SignWorkerCompletedArgs(time, stat, Error, _taskQueue.Error)); } }