private async void StartWriteTask(Guid actuatorId, Task <Command> command) { var result = await command; if (result.Value.ExecuteDate <= DateTime.Now) { Console.WriteLine("ExecuteDate passed: " + result.Value.ExecuteDate); Console.WriteLine("Now: " + DateTime.Now); return; } var actuator = await _actuatorRepo.Get(actuatorId); var writeSource = new CancellationTokenSource(); _serialCancellation.AddSource(result.Id, writeSource); //fire and forget, will confirm in database upon completion _ = Task.Run(async() => { Console.WriteLine("Run Task"); Command written; using (var scope = _serviceScopeFactory.CreateScope()) { var serialWrite = scope.ServiceProvider.GetRequiredService <ISerialWrite>(); written = await serialWrite.Write(actuator, result, writeSource); } return(written); }, writeSource.Token).ContinueWith(async task => { var newResult = await task; if (newResult == null) { return; } if (newResult.Value.Repeat == TimeSpan.Zero) { _serialCancellation.RemoveSource(newResult.Id); } else { Console.WriteLine("old: " + newResult.Value.ExecuteDate); Console.WriteLine("repeat: " + newResult.Value.Repeat); var newTime = newResult.Value.ExecuteDate + newResult.Value.Repeat; Console.WriteLine("new: " + newTime); newResult.Value.ExecuteDate += newResult.Value.Repeat; using (var scope = _serviceScopeFactory.CreateScope()) { var service = scope.ServiceProvider.GetRequiredService <ICommandService>(); _ = service.Update(newResult.Id, actuatorId, newResult.Value); } Console.WriteLine("Repeated"); } }); }
public IActionResult Get(int id) { return(Ok(repo.Get(id))); }
public Task <Actuator> GetById(Guid id) { return(_repo.Get(id)); }