public override async Task <GarbageCollectReply> GarbageCollect(GarbageCollectRequest request, ServerCallContext context) { await _semaphoreSlim.WaitAsync(); var reply = new GarbageCollectReply(); try { GC.Collect(); ROpsApi.GarbageCollect(); reply.Payload = new GarbageCollectPayload(); } catch (Exception ex) { reply.Error = PopulateError(ex); _logger.LogError(ex, nameof(GarbageCollect)); } finally { _semaphoreSlim.Release(); } return(await Task.FromResult(reply)); }