'Asynchronous BeginTransaction operation.
Args:
config: A configuration object or None.  Defaults are taken from
the connection\'s default configuration.
app: Application ID.
Returns:
A MultiRpc object.'

def async_begin_transaction(self, config, app):

    if ((not isinstance(app, basestring)) or (not app)):
        raise datastore_errors.BadArgumentError(('begin_transaction    requires    an    application    id    argument    (%r)' % (app,)))
    if (self._api_version == _CLOUD_DATASTORE_V1):
        req = googledatastore.BeginTransactionRequest()
        resp = googledatastore.BeginTransactionResponse()
    else:
        req = datastore_pb.BeginTransactionRequest()
        req.set_app(app)
        if TransactionOptions.xg(config, self.__config):
            req.set_allow_multiple_eg(True)
        resp = datastore_pb.Transaction()
    return self._make_rpc_call(config, 'BeginTransaction', req, resp, get_result_hook=self.__begin_transaction_hook, service_name=self._api_version)
