public override async Task <EvaluateStringsReply> EvaluateStrings(EvaluateStringsRequest request, ServerCallContext context) { await _semaphoreSlim.WaitAsync(); var reply = new EvaluateStringsReply(); try { var strings = ROpsApi.EvaluateStrings(request.Code); reply.Payload = new EvaluateStringsPayload(); foreach (var kvp in strings) { var stringList = new StringList(); if (kvp.Value.IsCollection()) { stringList.Strings.Add(kvp.Value); } reply.Payload.Strings.Add(kvp.Key, stringList); } } catch (Exception ex) { reply.Error = PopulateError(ex); _logger.LogError(ex, nameof(EvaluateStrings)); } finally { _semaphoreSlim.Release(); } return(await Task.FromResult(reply)); }