コード例 #1
0
        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));
        }
コード例 #2
0
        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)));
        }