下载本手册

X DevAPI用户指南/CRUD操作/ Synchronous与异步执行

3.3同步与异步执行

传统上,许多MySQL驱动程序在执行SQL语句时使用同步方法。这意味着打开连接和执行查询等操作会被阻塞,直到完成,这可能需要很长时间。为了实现并行执行,开发人员必须编写一个多线程应用程序。

任何支持X协议的MySQL客户端都可以提供异步执行,可以使用回调,承诺,或者在实际需要的时候显式地等待特定的结果。

异步操作

使用回调是实现异步操作的一种非常常见的方法。指定了回调函数时,CRUD操作是非阻塞的,这意味着即使尚未获取数据库的结果,立即调用下一个语句。只有在结果可用时,才会调用回调。

node.js javascript代码

var employees = db.getTable('employee');员工。select('name', 'age') .where('name like:name') .orderBy('name') .bind('name', 'm%') .execute(function (row){//用row做某事}).catch(err){//处理错误});

C#代码

var雇员= db.gettable(“员工”);var select = employees.select(“名称”,“年龄”).where(“姓名:name”).Orderby(“name”).bind(“name”,“m%”).executeasync();select.continuewith(t => {if(t.exception!= null){//句柄错误} //与结果集}做某事);

Java代码

表员工= db.gettable(“员工”);//异步地执行查询,获取将来的完成文件 Rowsfuture =员工。选择(“名称”,“年龄”).where(“名称如下”).orderby(“名称”).bind(“名称”“,”m%“)。executeasync();//依赖函数可以附加到可完成的文件

mysql shell javascript代码

//不实现异步执行

mysql shell python代码

//不实现异步执行

Python代码

//不实现异步执行

c++代码

//不实现异步执行

使用等待的异步操作

某些语言可以使用异步/等待模式。

C#代码

任务 getEmployeesTask = employees。选择(“名字”,“年龄”)。(“名称:名称”).OrderBy .Bind(“名字”)(“名字”,“m %”).ExecuteAsync ();//当getEmployeesTask在后台执行时做一些其他的事情//此时我们准备取回结果。如果没有完成,则会阻塞,直到完成。{//使用row对象}

Connector/Node.js使用承诺对所有网络操作使用异步操作。看到其他的例子。

Java代码

表员工= db.gettable(“员工”);//异步地执行查询,获取将来的完成文件 Rowsfuture =员工。选择(“名称”,“年龄”).where(“名称如下”).orderby(“名称”).bind(“名称”“,”m%“)。executeasync();//等到它已准备就绪RowResult Rows = Rowsfuture.get();

语法差异

根据所使用的语言,X DevAPI可能实现如下函数ExecuteAsync()换来的执行([mysqlx.async])或者除了执行([mysqlx.async])

例如,在Node.js上下文中,所有执行都是异步的。因此,连接器/ node.js不需要区分execute ()ExecuteAsync()。要表示异步默认执行,仅实现连接器/ node.jsexecute ()返回JavaScript promise对象。

强大类型的编程语言(例如Java或C#)可以利用两个明显的名为API调用同步和异步执行。两个调用可以具有不同的返回类型。例如,连接器/ j可以使用execute ()返回A.Rowresult.DocResultExecuteAsync()返回A.CompletableFuture < T >其中类型参数是结果类型之一。