请问各位大佬,有一个资料生成项目,客户填好信息后提交在服务器上生成好打印资料并提供下载,现在有一个问题就是不使用异步的话,生成资料时就会让服务器卡死,但使用异步又不进行排队执行就会出错。现在我用的是一个低级方法,代码如下:
此主题相关图片如下:1.jpg
以上代码也能解决问题,但感觉会出问题。
我想问的是有没有一种方法可以为生成资料单开一个子线程,然后有客户提交信息后在这个子线程里进行排队生成,这样就不会让服务器卡死了,生成资料也不会出错了。
就是用EXCEL模板和WORD模板生成资料,上面的其他代码就是EXCEL模板和WORD模板的生成代码,没有什么特别的地方。如果用异步函数AsyncExecute生成在生成的时候就会出错,如果不改任何代码变成Execute生成就不会出错。我主要想要的是有没有一种方法可以为生成资料单开一个子线程,然后有客户提交信息后在这个子线程里进行排队生成,这样就不会让服务端狐表卡死了,生成资料也不会出错了。
或者其他方式实现不阻塞主线程进行EXCEL模板和WORD模板的生成。当然不用排队可以同时进行EXCEL模板和WORD模板的生成又不影响主线程就是最好的。 我上面的代码就是用异步函数AsyncExecute生成的,用的方法就是不断查询是否有一条数据正在生成资料,如果有就暂停子线程10秒循环100次。我想问问有没有更好方法实现这个功能。
[此贴子已经被作者于2024/5/20 21:24:08编辑过]
蓝版,再问下生成WORD模板和excel模板的代码在同一时间有10次用异步方式调用(不考试代码问题),能不能正常用模板生成文件?我想确定方向对不对。
[此贴子已经被作者于2024/5/21 11:55:21编辑过]
我也不知道,因为不清楚模板底层的处理模式。这个建议自己测试,但是根据office的尿性,估计多个进程同时访问同一个文档是会有问题的
我测试过同一时间多次异步调用生成函数要出错,所以又回到第一条贴子上的问题了,有没有办法让子线程进行排队?我上面代码是用的暂停子线程的方法,解决同一时间多次异步调用生成函数的问题,但总觉得会出问题,所以问问有没有更好的办法解决子线程排队执行的方法。
[此贴子已经被作者于2024/5/21 12:48:29编辑过]
可以结合同步函数: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编辑过]