Esempio n. 1
0
        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);
        }
Esempio n. 3
0
 private void OnWorkComplete(object sender, WorkCompleteEventArgs e)
 {
     _Logger?.Debug("Work completed: " + e.UnitOfWork.Id);
     ReportWorkCompletionAsync(e.UnitOfWork);
     RequestWorkAsync();
 }