【发布时间】:2010-04-20 04:02:45
【问题描述】:
我在 ASP.NET 中有一个 Web 服务被一个时间敏感的进程调用。如果 Web 服务的运行时间超过 N 秒,我想从调用中返回,以便时间敏感的操作可以继续。这可能吗?如果可以,代码是什么?
【问题讨论】:
标签: .net asp.net web-services
我在 ASP.NET 中有一个 Web 服务被一个时间敏感的进程调用。如果 Web 服务的运行时间超过 N 秒,我想从调用中返回,以便时间敏感的操作可以继续。这可能吗?如果可以,代码是什么?
【问题讨论】:
标签: .net asp.net web-services
【讨论】:
让 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
【讨论】: