以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  怎么设置超时处理。  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=100449)

--  作者:huhu
--  发布时间:2017/5/11 15:15:00
--  怎么设置超时处理。
红色的代码是我传"出库单号",对方接口给我返回数据。
我想增加超过15s如果还没从对方接口获取数据。那么我就不处理这行dr了,接着处理下一行。
这个超时限制怎么写代码?

Dim drs As List(of DataRow) = DataTables("销售出库单列表").SQLSelect("发货要求 is null")
    For Each dr As DataRow In drs
        Dim d2 As new ClassLibrary2.Class2()
        Dim Multi As String =d2.getInvoiceInfoByONo(dr("出库单号"))
        If Multi = "非销售出库单"  Or Multi = "非BD订单系统生成的销售发货单"  Then
            dr("发货要求") = dr("数量")
            dr("挪货数量") = dr("数量")
            dr("实扫到数量") = 0
            dr("比较结果") = dr("实扫到数量") - dr("数量")
            dr("U8发货") = True
            dr.save
        Else
            Dim data As object
            Dim JscriptCode = "function toObject(json) {eval(""var o=""+json);return o;}"
            Dim ScriptControl = CreateObject("MSScriptControl.ScriptControl")
            With ScriptControl
                .Language = "Javascript"
                .Timeout = -1
                .AddCode(JscriptCode)
                data = .Run("toObject", Multi)
            End With
            For Each level2 As object In data.BDinvoiceBody
                If level2.iall.workInfos.length = 0 Then
                    dr("发货要求") = dr("数量")
                    dr.save
                Else
                    For Each level4 As object In level2.iall.workInfos
                        If level4.whpiDl.workNo = ""  And level4.whpiDl.workLineNo = "" Then
                            dr("发货要求") = dr("数量")
                            dr.save
                        Else
                            Dim str As String
                            str &= level4.whpiDl.workNo & "_"
                            str &=level4.whpiDl.workLineNo & "_"
                            If level2.orderDetail.productNo = dr("存货编码") Then
                                dr("发货要求") = str & dr("数量")
                                dr.save
                            Else
                                dr("发货要求") = dr("数量")
                                dr.save
                            End If
                            str = ""
                        End If
                    Next
                End If
            Next


--  作者:有点蓝
--  发布时间:2017/5/11 15:36:00
--  
没有办法计时的。调用远程服务后,没有返回之前是做不了任何事情的。返回后已经有结果,再计时已经没有意义。


--  作者:有点色
--  发布时间:2017/5/11 15:59:00
--  

 试试多线程处理。论坛搜索多线程的代码。

 

 做个计时,15秒后检测后面的变量是否改变,如果没改变,就结束线程。(或者你不检测也可以,让其单独运行到服务器连接超时)