public async Task StartAsync() { _Logger?.Debug("Start requested"); State = WorkerState.Starting; ListenerTask = StartListenerAsync(); State = WorkerState.Started; _Logger?.Debug("Started"); Master = await GetMasterAsync(); var myselfAsMaster = await UpdateElectionFileAsync(); if (Master == null) { _Logger.Debug("I am greater than master. Attempting take over."); await TakeOverAsync(Master, myselfAsMaster, "none"); } if (Master < myselfAsMaster) { await ElectionRequestAsync(ElectionRequestType.Election); } else if (Master == myselfAsMaster) { _Logger.Debug("I am the master."); await QueueWorkAsync(); return; } else { await RequestWorkAsync(); } }
public async Task <UnitOfWork> ProcessWorkAsync(IUnitOfWorkFileReader reader, UnitOfWork unitOfWork) { _Logger?.Debug("Started processing: " + unitOfWork?.Id); if (IsProcessing) { throw new Exception("Already processing a unit of work."); } IsProcessing = true; var text = await reader.ReadAllTextAsync(unitOfWork.AssociateFile); var strings = Regex.Split(text, "\\s+", RegexOptions.Multiline); var result = Levenshtein.WagnerFischer(strings[0], strings[1]); unitOfWork.Result = result[result.GetLength(0) - 1, result.GetLength(1) - 1]; OnComplete?.Invoke(this, new WorkCompleteEventArgs { UnitOfWork = unitOfWork }); IsProcessing = false; _Logger?.Debug("Finished processing: " + unitOfWork?.Id); return(unitOfWork); }
private void OnWorkComplete(object sender, WorkCompleteEventArgs e) { _Logger?.Debug("Work completed: " + e.UnitOfWork.Id); ReportWorkCompletionAsync(e.UnitOfWork); RequestWorkAsync(); }