经过一段时间后从函数返回一个值?
问题描述:
我有一个时间敏感的进程调用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
哎呀!对于那些看起来......我忘了在语句'返回'TimeOut''之前杀死线程。它仍然会在web服务返回时自行结束,但如果使用相同的对象2x,如果再次调用可能会混淆共享成员变量。 – FastAl 2010-05-24 19:26:49