代码之家  ›  专栏  ›  技术社区  ›  Achilles

在经过一段时间后从函数返回值?

  •  0
  • Achilles  · 技术社区  · 15 年前

    我在asp.net中有一个web服务被一个时间敏感的进程调用。如果web服务运行时间超过n秒,我希望从调用返回,以便对时间敏感的操作可以继续。这可能吗?如果可能的话,代码是什么?

    2 回复  |  直到 15 年前
        1
  •  1
  •   FastAl    15 年前

    让web服务在单独的线程中调用其长时间运行的部分。等一下,杀了它,如果时间太长就保释。请预先警告,这可能会使稀缺资源挂起(例如,数据库连接等),但您也可以修复此问题。

    (抱歉,代码又快又脏,是演示版的,您应该详细说明并添加类型、webservice细节等。)

    dim ResultFromWorker as String
    dim DoneWorking as boolean
    
    sub GetWebServiceMagicNumber
        DoneWorking = False
        dim t as new thread = addressof (GetWebServiceMagicNumber_Worker)
        t.start
        dim count as integer = 0
        while not DoneWorking and Count <100 
            count +=1
            System.Threading.Thread.Sleep(100) ' Important to not kill CPU time
        wend
        if DoneWorking then
            return ResultFromWorker
        else
            return "TimeOut"
        EndIf
    end sub
    
    sub GetWebServiceMagicNumber_Worker
        try
            ResultFromWorker = SearchTheWholeWorldForTheAnswer()
        catch ex1 as ThreadAbortException 
            ' ignore - My code caused this on purpose
            ' calling thread should clean up scarce resources, this is borrowed time
        catch ex2 as Exception
            ResultFromWorker = "Error - " & ex.tostring
        finally
            DoneWorking=True
        End Try
    end sub
    
        2
  •  3
  •   Robert Harvey    15 年前