异步函数和同步函数
我们在自定义函数的时候,并不存在常规函数、异步函数和同步函数的区分,全部都是一样的定义,参考:自定义函数
那么如何实现异步函数和同步函数的效果呢?
以前调用一个自定义函数函数的语法为:
Functions.Execute(函数名, 参数1, 参数2, 参数3....)
Foxtable 2018除了Execute,新增加了三个用于调用函数的方法,分别是AsyncExecute、SyncExecute和BeginSyncExecute,这三个方法的语法和Execute完全相同。
同一个函数,如果用AsyncExecute方法调用,就是异步函数,如果用SyncExecute或BeginSyncExecute方法调用,就是同步函数。
现在我们有四个方法用于调用自定义函数了:
方法 | 说明 |
Execute |
最常用的函数调用方法,可以在主线程使用,也可以在子线程使用。 |
AsyncExecute | 用异步方式调用函数,一般在主线程使用。 如果在主线程(A)通过AsyncExecute调用函数,被调用的函数将在一个新的子线程(B)中运行。 如果在子线程(B)通过AsyncExecute调用函数,被调用的函数将在一个新的子线程(C)中运行。 也就是说AsyncExecute始终会开启一个新的线程运行函数,所以AsyncExecute方法一般仅在在主线程使用。 由于AsyncExecute并不会等函数执行完毕,就会执行返回调用方线程继续执行后续代码,所以AsyncExecute不会返回函数执行结果。 |
SyncExecute BeginSyncExecute |
用同步方式调用函数,二者区别如下: 子线程通过BeginSyncExecute调用函数后,不会做任何的等待,立即返回原来位置继续执行后后续代码,BeginSyncExecute不会返回函数的结果 子线程通过SyncExecute调用函数,会一直等待,直到函数执行完毕,才会返回子线程继续执行后续代码,SyncExecute会返回函数的结果。 多数时候,我们都会用BeginSyncExecute方法调用同步函数,如果希望获取同步函数的结果,可以使用SyncExecute方法调用。 二者都只应该在子线程使用,因为在主线程使用毫无意义。 |
在Foxtable进行异步编程,离不开同步函数和异步函数,但并不是真的存在这样的函数,只是通过不同的调用方法来实现同步和异步的效果,但为便于讲述和理解,我们会继续采用同步函数和异步函数的说法。