public async Task <HttpStatusCode> PutControllableProcessAsync(Process process) { using (_SimpleLogger.BeginScope(SimpleLoggingScopeId.Create(nameof(PutControllableProcessAsync)))) { var methodNamesFromStack = _MethodNamesFromStackFramesExtractor.ExtractMethodNamesFromStackFrames(); _SimpleLogger.LogInformationWithCallStack($"Put controllable process with id={process.Id}", methodNamesFromStack); var context = new DefaultContainer(new Uri(BaseUrl)); ControllableProcess controllableProcess; if ((await ProcessExists(context, process.Id)).YesNo) { _SimpleLogger.LogInformationWithCallStack($"Update controllable process with id={process.Id}", methodNamesFromStack); controllableProcess = await context.ControllableProcesses.ByKey(process.Id).GetValueAsync(); controllableProcess.Title = process.ProcessName; controllableProcess.Status = ControllableProcessStatus.Idle; controllableProcess.ConfirmedAt = DateTimeOffset.Now; controllableProcess.LaunchCommand = process.MainModule?.FileName; context.UpdateObject(controllableProcess); } else { _SimpleLogger.LogInformationWithCallStack($"Insert controllable process with id={process.Id}", methodNamesFromStack); controllableProcess = new ControllableProcess { ProcessId = process.Id, Title = process.ProcessName, Status = ControllableProcessStatus.Idle, ConfirmedAt = DateTimeOffset.Now, LaunchCommand = process.MainModule?.FileName }; context.AddToControllableProcesses(controllableProcess); } var response = await context.SaveChangesAsync(SaveChangesOptions.ReplaceOnUpdate); var statusCode = response.Select(r => (HttpStatusCode)r.StatusCode).FirstOrDefault(); return(statusCode); } }