Policy

var result = Policy.HandleResult<DeviceQuestionResponseModel>(g => !IfNeedJumpOut(g))
                                                                .WaitAndRetry(times, n => TimeSpan.FromSeconds(0.1))
                                                                .Execute(() => STARletBMGResultFromOuttle(requestId).Result);

 

验证逻辑

  public DeviceQuestionResponseModel WaitBgiLimsResponse(string requestId)
        {
            DeviceQuestionResponseModel result = null;
            Policy.Timeout(3 * 60, TimeoutStrategy.Pessimistic)
                  .Execute(() =>
                  {
                      Policy.HandleResult<bool>(p => p)
                              .WaitAndRetryForever(n => TimeSpan.FromSeconds(1))
                                  .Execute(() =>
                                  {
                                      var response = STARletBMGResultFromOuttle(requestId);
                                      response.Wait();
                                      if (response?.Result == null)
                                          return true;
                                      else
                                      {
                                          result = response.Result;
                                          return false;
                                      }
                                  });
                  });
            return result;
        }

最好的逻辑

        public DeviceQuestionResponseModel WaitResponseFromLims(string requestId) 
        {
            TimeSpan interval = TimeSpan.FromSeconds(0.1);
            var times = (int)(TimeSpan.FromMinutes(3)/ interval);
            var result = Policy.HandleResult<DeviceQuestionResponseModel>(g => !IfNeedJumpOut(g))
                                                                .WaitAndRetry(times, n => TimeSpan.FromSeconds(0.1))
                                                                .Execute(() => STARletBMGResultFromOuttle(requestId).Result);
            if (!IfNeedJumpOut(result))
                throw new TimeoutException("WaitResponseFromLims timeout.");
            return result;

        }

        private bool IfNeedJumpOut(DeviceQuestionResponseModel response)
        {
            if (response == null)
            {
                return false;
            }
            else 
            {
                return true;
            }
        }


        /// <summary>
        /// STARletBMGResultFromOuttle
        /// </summary>
        /// <param name="requestId"></param>
        /// <returns></returns>
        public async Task<DeviceQuestionResponseModel> STARletBMGResultFromOuttle(string requestId)
        {
            var result = await _acquireBuff.IsReplyAsync(requestId);

            if (result != null && result.Responsed)
            {
                var row = await _acquireBuff.GetRaw(requestId);

                return !row.Responsed ? null
                    : new DeviceQuestionResponseModel()
                    {
                        Id = row.TaskId,
                        Attributes = JObject.Parse(row.ResponseAttribute).ToObject<DeviceQuestionActionType>(),
                        CommandId = row.CommandId,
                        RequestId = row.RequestId,
                        Response = row.ResponseResult.ToString()
                    };
            }
            else
                return null;
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值