以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]这种情况能用异步函数吗  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=192293)

--  作者:天一生水
--  发布时间:2024/6/11 16:03:00
--  [求助]这种情况能用异步函数吗
蓝老师好!
遍历表A的行数据,去更新表B中的列值,因为数据量较大,代码运行需10多个小时,我想问一下老师,这种情况适合利用异步函数吗?另外,我改写了一段AI给的异步函数代码,不知道对不对?
1、
For Each dr As DataRow In DataTables("表A").DataRows
    DataTables("表B").SQLReplaceFor("列1", dr("列1"), Filter0)
    DataTables("表B").SQLReplaceFor("列2", dr("列2"), Filter0)
    DataTables("表B").SQLReplaceFor("列3", dr("列3"), Filter0)
    DataTables("表B").SQLReplaceFor("列4", dr("列4"), Filter0)
    DataTables("表B").SQLReplaceFor("列5", dr("列5"), Filter0)
    ......            
Next
----------
2、
\' 定义异步函数
Async Function UpdateTrendDataAsync() As Task
    For Each dr As DataRow In DataTables("表A").DataRows
        Dim updateTask As Task = Task.Run(Sub()
                                    DataTables("表B").SQLReplaceFor("列1", dr("列1"), Filter0)
                                    DataTables("表B").SQLReplaceFor("列2", dr("列2"), Filter0)
                                    DataTables("表B").SQLReplaceFor("列3", dr("列3"), Filter0)
                                    DataTables("表B").SQLReplaceFor("列4", dr("列4"), Filter0)
                                    DataTables("表B").SQLReplaceFor("列5", dr("列5"), Filter0)
                                        End Sub)

        Await updateTask
    Next
End Function

\' 调用异步函数
Dim updateTask As Task = UpdateTrendDataAsync()

--  作者:有点蓝
--  发布时间:2024/6/11 16:07:00
--  
如果是foxtable的异步函数,不能用:http://www.foxtable.com/mobilehelp/topics/277.htm

Async 、Task这种还没有用过,不清楚。印象中这种玩意是.net 4.5才开始支持的,foxtable应该用不了
--  作者:天一生水
--  发布时间:2024/6/11 16:21:00
--  
那这种情况用什么方式能够提高运行速度~
--  作者:xubing051018
--  发布时间:2024/6/11 16:30:00
--  
...天,代码运行10个小时,这是多大的数据量,几百万行吗?
--  作者:有点蓝
--  发布时间:2024/6/11 16:43:00
--  
如果表A是内部表,这个没有办法了。如果是外部表,建议使用SQLcommand加载表格数据处理

或者直接使用sql,或者存储过程处理