异步函数和同步函数

我们在自定义函数的时候,并不存在常规函数、异步函数和同步函数的区分,全部都是一样的定义,参考:自定义函数

那么如何实现异步函数和同步函数的效果呢?

以前调用一个自定义函数函数的语法为:

Functions.Execute(函数名, 参数1, 参数2, 参数3....)

Foxtable 2018除了Execute,新增加了三个用于调用函数的方法,分别是AsyncExecute、SyncExecute和BeginSyncExecute,这三个方法的语法和Execute完全相同。

同一个函数,如果用AsyncExecute方法调用,就是异步函数,如果用SyncExecute或BeginSyncExecute方法调用,就是同步函数。

现在我们有四个方法用于调用自定义函数了:

方法 说明
Execute

最常用的函数调用方法,可以在主线程使用,也可以在子线程使用。
如果在主线程通过Execute方法调用某函数,此函数就运行在主线程。
如果在子线程通过Execute方法调用某函数,此函数就运行在子线程。
也就是说,Execute不会改变函数的运行线程,被调用的函数始终和调用方处于同一个线程中。

AsyncExecute 用异步方式调用函数,一般在主线程使用。
如果在主线程(A)通过AsyncExecute调用函数,被调用的函数将在一个新的子线程(B)中运行。
如果在子线程(B)通过AsyncExecute调用函数,被调用的函数将在一个新的子线程(C)中运行。
也就是说AsyncExecute始终会开启一个新的线程运行函数,所以AsyncExecute方法一般仅在在主线程使用。
由于AsyncExecute并不会等函数执行完毕,就会执行返回调用方线程继续执行后续代码,所以AsyncExecute不会返回函数执行结果。
SyncExecute
BeginSyncExecute
用同步方式调用函数,二者区别如下:
子线程通过BeginSyncExecute调用函数后,不会做任何的等待,立即返回原来位置继续执行后后续代码,BeginSyncExecute不会返回函数的结果
子线程通过SyncExecute调用函数,会一直等待,直到函数执行完毕,才会返回子线程继续执行后续代码,SyncExecute会返回函数的结果。
多数时候,我们都会用BeginSyncExecute方法调用同步函数,如果希望获取同步函数的结果,可以使用SyncExecute方法调用。
二者都只应该在子线程使用,因为在主线程使用毫无意义。

在Foxtable进行异步编程,离不开同步函数和异步函数,但并不是真的存在这样的函数,只是通过不同的调用方法来实现同步和异步的效果,但为便于讲述和理解,我们会继续采用同步函数和异步函数的说法。


本页地址:http://www.foxtable.com/mobilehelp/topics/3273.htm