void IOpCompletionCallback.OnComplete(bool success)
 {
     try
     {
         completionCallbackData.Callback(success, this, completionCallbackData.State);
     }
     catch (Exception e)
     {
         Logger.Error(e, "Exception occured while invoking batch completion delegate.");
     }
     finally
     {
         completionCallbackData = default(CompletionCallbackData);
         Recycle();
     }
 }
 public void SetCompletionCallback(BatchCompletionDelegate callback, object state)
 {
     GrpcPreconditions.CheckState(completionCallbackData.Callback == null);
     GrpcPreconditions.CheckNotNull(callback, nameof(callback));
     completionCallbackData = new CompletionCallbackData(callback, state);
 }