public AsyncReadOperation<BsonDocument> asExplainableOperationAsync(final ExplainVerbosity explainVerbosity) {
        notNull("explainVerbosity", explainVerbosity);
        return new AsyncReadOperation<BsonDocument>() {
            @Override
            public void executeAsync(final AsyncReadBinding binding, final SingleResultCallback<BsonDocument> callback) {
                withConnection(binding, new AsyncCallableWithConnectionAndSource() {
                    @Override
                    public void call(final AsyncConnectionSource connectionSource, final AsyncConnection connection, final Throwable t) {
                        SingleResultCallback<BsonDocument> errHandlingCallback = errorHandlingCallback(callback, LOGGER);
                        if (t != null) {
                            errHandlingCallback.onResult(null, t);
                        } else {
                            AsyncReadBinding singleConnectionReadBinding =
                            new AsyncSingleConnectionReadBinding(binding.getReadPreference(), connectionSource.getServerDescription(),
                                                                 connection);

                            if (serverIsAtLeastVersionThreeDotTwo(connection.getDescription())) {
                                new CommandReadOperation<BsonDocument>(namespace.getDatabaseName(),
                                                                       new BsonDocument("explain", getCommand(binding.getSessionContext())),
                                                                       new BsonDocumentCodec())
                                .executeAsync(singleConnectionReadBinding,
                                              releasingCallback(exceptionTransformingCallback(errHandlingCallback),
                                                                singleConnectionReadBinding, connectionSource, connection));
                            } else {
                                createExplainableQueryOperation()
                                .executeAsync(singleConnectionReadBinding,
                                              releasingCallback(new ExplainResultCallback(errHandlingCallback),
                                                      singleConnectionReadBinding, connectionSource, connection));
                            }
                        }
                    }
                });
            }
        };
    }
public AsyncReadOperation<BsonDocument> asExplainableOperationAsync(final ExplainVerbosity explainVerbosity) {
        notNull("explainVerbosity", explainVerbosity);
        return new AsyncReadOperation<BsonDocument>() {
            @Override
            public void executeAsync(final AsyncReadBinding binding, final SingleResultCallback<BsonDocument> callback) {
                withConnection(binding, new AsyncCallableWithConnectionAndSource() {
                    @Override
                    public void call(final AsyncConnectionSource connectionSource, final AsyncConnection connection, final Throwable t) {
                        SingleResultCallback<BsonDocument> errHandlingCallback = errorHandlingCallback(callback, LOGGER);
                        if (t != null) {
                            errHandlingCallback.onResult(null, t);
                        } else {
                            AsyncReadBinding singleConnectionReadBinding =
                            new AsyncSingleConnectionReadBinding(binding.getReadPreference(), connectionSource.getServerDescription(),
                                                                 connection);

                            if (serverIsAtLeastVersionThreeDotTwo(connection.getDescription())) {
                                new CommandReadOperation<BsonDocument>(namespace.getDatabaseName(),
                                                                       new BsonDocument("explain", getCommand(binding.getSessionContext())),
                                                                       new BsonDocumentCodec())
                                .executeAsync(singleConnectionReadBinding,
                                              releasingCallback(exceptionTransformingCallback(errHandlingCallback),
                                                                singleConnectionReadBinding, connectionSource, connection));
                            } else {
                                createExplainableQueryOperation()
                                .executeAsync(singleConnectionReadBinding,
                                              releasingCallback(new ExplainResultCallback(errHandlingCallback),
                                                      singleConnectionReadBinding, connectionSource, connection));
                            }
                        }
                    }
                });
            }
        };
    }
public AsyncReadOperation < BsonDocument > asExplainableOperationAsync ( final ExplainVerbosity explainVerbosity ) { notNull ( "explainVerbosity" , explainVerbosity ) ; return new AsyncReadOperation < BsonDocument > ( ) { @ Override public void executeAsync ( final AsyncReadBinding binding , final SingleResultCallback < BsonDocument > callback ) { withConnection ( binding , new AsyncCallableWithConnectionAndSource ( ) { @ Override public void call ( final AsyncConnectionSource connectionSource , final AsyncConnection connection , final Throwable t ) { SingleResultCallback < BsonDocument > errHandlingCallback = errorHandlingCallback ( callback , LOGGER ) ; if ( t != null ) { errHandlingCallback . onResult ( null , t ) ; } else { AsyncReadBinding singleConnectionReadBinding = new AsyncSingleConnectionReadBinding ( binding . getReadPreference ( ) , connectionSource . getServerDescription ( ) , connection ) ; if ( serverIsAtLeastVersionThreeDotTwo ( connection . getDescription ( ) ) ) { new CommandReadOperation < BsonDocument > ( namespace . getDatabaseName ( ) , new BsonDocument ( "explain" , getCommand ( binding . getSessionContext ( ) ) ) , new BsonDocumentCodec ( ) ) . executeAsync ( singleConnectionReadBinding , releasingCallback ( exceptionTransformingCallback ( errHandlingCallback ) , singleConnectionReadBinding , connectionSource , connection ) ) ; } else { createExplainableQueryOperation ( ) . executeAsync ( singleConnectionReadBinding , releasingCallback ( new ExplainResultCallback ( errHandlingCallback ) , singleConnectionReadBinding , connectionSource , connection ) ) ; } } } } ) ; } } ; }
Gets an operation whose execution explains this operation.

@param explainVerbosity the explain verbosity
@return a read operation that when executed will explain this operation
Gets an operation whose execution explains this operation .