public async Task <ApiResponse <PutResult <Guid> > > Put([FromBody] StateMachineInstancePutDto dto) { var putResult = await _stateMachineInstanceService.Put(dto); var result = new PutResult <Guid>(putResult.Instance?.Id ?? Guid.Empty); return(ApiResponse.Custom(Response, putResult.Code, putResult.Message, result)); }
public async Task <StateMachineInstancePutResultDto> Put(StateMachineInstancePutDto dto) { // 获取name对应的状态机代码 var stateMachineEntity = await _stateMachineRepository.QueryNoTrackingAsync(q => q.FirstOrDefaultAsyncTestable(x => x.Name == dto.Name)); if (stateMachineEntity == null) { return(StateMachineInstancePutResultDto.NotFound("state machine not found")); } // 创建状态机实例 var stateMachineInstanceEntity = new StateMachineInstanceEntity() { Id = PrimaryKeyUtils.Generate <Guid>(), Name = stateMachineEntity.Name, Status = StateMachineStatus.Running, Stage = StateMachineBase.InitialStage, StartedActors = new List <ActorInfo>(), InitialBlobs = dto.InitialBlobs ?? new BlobInfo[0], Limitation = ContainerLimitation.Default .WithDefaults(dto.Limitation) .WithDefaults(stateMachineEntity.Limitation) .WithDefaults(_configuration.Limitation), Parameters = dto.Parameters, Priority = dto.Priority, FromManagementService = _configuration.Name, ReRunTimes = 0, Exception = null, ExecutionKey = PrimaryKeyUtils.Generate <Guid>().ToString(), StartTime = DateTime.UtcNow, EndTime = null }; var stateMachineInstance = await _stateMachineInstanceStore.CreateInstance( stateMachineEntity, stateMachineInstanceEntity); // 添加状态机实例到数据库 await _repository.AddAsync(stateMachineInstanceEntity); await _repository.SaveChangesAsync(); // 运行状态机, 从这里开始会在后台运行 #pragma warning disable CS4014 _stateMachineInstanceStore.RunInstance(stateMachineInstance); #pragma warning restore CS4014 return(StateMachineInstancePutResultDto.Success( Mapper.Map <StateMachineInstanceEntity, StateMachineInstanceOutputDto>(stateMachineInstanceEntity))); }