@Override
    public void cancel(@Nullable String message, @Nullable Throwable cause) {
        if (needsDirectInvocation()) {
            doCancel(message, cause);
        } else {
            execute(() -> doCancel(message, cause));
        }
    }
Encapsulates the state of a single client call, writing messages from the client and reading responses
from the server, passing to business logic via {@link ClientCall.Listener}.
grpc/src/main/java/com/linecorp/armeria/internal/client/grpc/ArmeriaClientCall.java