以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 关于异步函数列队执行的问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=191961) |
-- 作者:爱好所有 -- 发布时间:2024/5/19 9:17:00 -- 关于异步函数列队执行的问题 请问各位大佬,有一个资料生成项目,客户填好信息后提交在服务器上生成好打印资料并提供下载,现在有一个问题就是不使用异步的话,生成资料时就会让服务器卡死,但使用异步又不进行排队执行就会出错。现在我用的是一个低级方法,代码如下: 我想问的是有没有一种方法可以为生成资料单开一个子线程,然后有客户提交信息后在这个子线程里进行排队生成,这样就不会让服务器卡死了,生成资料也不会出错了。 |
-- 作者:有点蓝 -- 发布时间:2024/5/19 20:19:00 -- 具体要做什么功能,以及异步函数完整代码发上来看看 |
-- 作者:爱好所有 -- 发布时间:2024/5/20 21:07:00 -- 就是用EXCEL模板和WORD模板生成资料,上面的其他代码就是EXCEL模板和WORD模板的生成代码,没有什么特别的地方。如果用异步函数AsyncExecute生成在生成的时候就会出错,如果不改任何代码变成Execute生成就不会出错。 我主要想要的是有没有一种方法可以为生成资料单开一个子线程,然后有客户提交信息后在这个子线程里进行排队生成,这样就不会让服务端狐表卡死了,生成资料也不会出错了。 或者其他方式实现不阻塞主线程进行EXCEL模板和WORD模板的生成。当然不用排队可以同时进行EXCEL模板和WORD模板的生成又不影响主线程就是最好的。 我上面的代码就是用异步函数AsyncExecute生成的,用的方法就是不断查询是否有一条数据正在生成资料,如果有就暂停子线程10秒循环100次。我想问问有没有更好方法实现这个功能。
[此贴子已经被作者于2024/5/20 21:24:08编辑过]
|
-- 作者:有点蓝 -- 发布时间:2024/5/20 22:07:00 -- 如果只是执行sql,异步不会有任何问题。肯定是使用了不该用的:http://www.foxtable.com/mobilehelp/topics/277.htm |
-- 作者:爱好所有 -- 发布时间:2024/5/21 11:50:00 -- 蓝版,再问下生成WORD模板和excel模板的代码在同一时间有10次用异步方式调用(不考试代码问题),能不能正常用模板生成文件?我想确定方向对不对。 [此贴子已经被作者于2024/5/21 11:55:21编辑过]
|
-- 作者:有点蓝 -- 发布时间:2024/5/21 11:53:00 -- 我也不知道,因为不清楚模板底层的处理模式。这个建议自己测试,但是根据office的尿性,估计多个进程同时访问同一个文档是会有问题的 |
-- 作者:爱好所有 -- 发布时间:2024/5/21 12:48:00 -- 我测试过同一时间多次异步调用生成函数要出错,所以又回到第一条贴子上的问题了,有没有办法让子线程进行排队?我上面代码是用的暂停子线程的方法,解决同一时间多次异步调用生成函数的问题,但总觉得会出问题,所以问问有没有更好的办法解决子线程排队执行的方法。 [此贴子已经被作者于2024/5/21 12:48:29编辑过]
|
-- 作者:有点蓝 -- 发布时间:2024/5/21 13:41:00 -- 可以结合同步函数:http://www.foxtable.com/mobilehelp/topics/3270.htm,下面是一个例子 定义全部变量,用于处理执行次数 Public _n as Integer 异步函数 Sleep(10000) \'等待10秒,模拟各种业务处理 Functions.BeginSyncExecute("同步函数") \'调用同步函数 同步函数 _n -= 1 If _n > 0 Then Functions.AsyncExecute("异步函数") \'调用异步执行下一个任务 End If 按钮 _n = 5 \'定义执行5次 Functions.AsyncExecute("异步函数") [此贴子已经被作者于2024/5/21 13:42:25编辑过]
|
-- 作者:爱好所有 -- 发布时间:2024/5/25 10:06:00 -- 谢谢蓝版,用此方法确实解决了问题。 |