public async Task EquationAsync(string eqn)
        {
            var action = new Protos.CalculatorDuplexCallback.Types.Equation
            {
                Eqn = eqn,
            };

            var callback = new Protos.CalculatorDuplexCallback
            {
                Equation = action
            };

            await _stream.WriteAsync(callback);
        }
        public async Task ResultAsync(double value)
        {
            var action = new Protos.CalculatorDuplexCallback.Types.Result
            {
                Value = value,
            };

            var callback = new Protos.CalculatorDuplexCallback
            {
                Result = action
            };

            await _stream.WriteAsync(callback);
        }
        public void HandleCallback(Protos.CalculatorDuplexCallback callback)
        {
#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
            switch (callback.CallbackCase)
            {
            case Protos.CalculatorDuplexCallback.CallbackOneofCase.Result:
                Task.Run(() => InvokeResultAsync(callback.Result));
                break;

            case Protos.CalculatorDuplexCallback.CallbackOneofCase.Equation:
                Task.Run(() => InvokeEquationAsync(callback.Equation));
                break;
            }
#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
        }