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

问题描述:

我有一个时间敏感的进程调用ASP.NET中的Web服务。如果Web服务运行时间超过N秒,我想从呼叫返回,以便时间敏感的操作可以继续。这是可能的,如果是这样的代码是什么?经过一段时间后从函数返回一个值?

有Web服务调用一个单独的线程其长期运行的一部分。然后等待,杀死它,如果花费太长时间,则保释。预先警告这可能会导致稀缺资源(例如,数据库连接等),但你也可以解决这个问题。

(遗憾的快速和肮脏的代码,它是演示,您应详细说明,并添加类型,web服务细节等)

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 
+0

哎呀!对于那些看起来......我忘了在语句'返回'TimeOut''之前杀死线程。它仍然会在web服务返回时自行结束,但如果使用相同的对象2x,如果再次调用可能会混淆共享成员变量。 – FastAl 2010-05-24 19:26:49

+0

我认为这个...我试图让的原因这样做是为了避免编译引用服务的应用程序。 – Achilles 2010-04-19 19:39:58