public override async Task <EvaluateDoublesReply> EvaluateDoubles(EvaluateDoublesRequest request, ServerCallContext context) { await _semaphoreSlim.WaitAsync(); var reply = new EvaluateDoublesReply(); try { var doubles = ROpsApi.EvaluateDoubles(request.Code); reply.Payload = new EvaluateDoublesPayload(); foreach (var kvp in doubles) { var doubleList = new DoubleList(); if (kvp.Value.IsCollection()) { doubleList.Doubles.Add(kvp.Value); } reply.Payload.Doubles.Add(kvp.Key, doubleList); } } catch (Exception ex) { reply.Error = PopulateError(ex); _logger.LogError(ex, nameof(EvaluateDoubles)); } finally { _semaphoreSlim.Release(); } return(await Task.FromResult(reply)); }