.net 在经过一段时间后从函数返回值?
我在ASP.NET中有一个web服务被一个时间敏感的进程调用。如果web服务运行时间超过N秒,我希望从调用返回,以便时间敏感的操作可以继续。这可能吗?如果可能,代码是什么?异步调用您的web服务.net 在经过一段时间后从函数返回值?,.net,asp.net,web-services,.net,Asp.net,Web Services,我在ASP.NET中有一个web服务被一个时间敏感的进程调用。如果web服务运行时间超过N秒,我希望从调用返回,以便时间敏感的操作可以继续。这可能吗?如果可能,代码是什么?异步调用您的web服务 异步调用web服务 让web服务在单独的线程中调用其长期运行部分。然后等待,杀了它,如果时间太长就保释。预先警告一下,这可能会使稀缺的资源陷入困境(例如,数据库连接等),但您也可以解决这一问题 (抱歉代码太快太脏,这是演示版,您应该详细说明并添加类型、Web服务细节等。) dim ResultFromW
异步调用web服务
让web服务在单独的线程中调用其长期运行部分。然后等待,杀了它,如果时间太长就保释。预先警告一下,这可能会使稀缺的资源陷入困境(例如,数据库连接等),但您也可以解决这一问题 (抱歉代码太快太脏,这是演示版,您应该详细说明并添加类型、Web服务细节等。)
dim ResultFromWorker作为字符串
dim DoneWorking作为布尔值
子GetWebServiceMagicNumber
DoneWorking=False
dim t as new thread=addressof(GetWebServiceMagicNumber\u Worker)
t、 开始
dim计数为整数=0
在不进行工作和计数时,让web服务在单独的线程中调用其长期运行部分。然后等待,杀了它,如果时间太长就保释。预先警告一下,这可能会使稀缺的资源陷入困境(例如,数据库连接等),但您也可以解决这一问题
(抱歉代码太快太脏,这是演示版,您应该详细说明并添加类型、Web服务细节等。)
dim ResultFromWorker作为字符串
dim DoneWorking作为布尔值
子GetWebServiceMagicNumber
DoneWorking=False
dim t as new thread=addressof(GetWebServiceMagicNumber\u Worker)
t、 开始
dim计数为整数=0
在不工作和计数的情况下,我考虑到了这一点……我之所以尝试绕开它是为了避免编译引用服务的应用程序。我考虑到了这一点……我之所以尝试绕开它是为了避免编译引用服务的应用程序。哎呀!对于那些期待。。。我忘了在语句“return”TimeOut“之前终止线程。当webservice返回时,它仍然会自行结束,但是如果再次调用,那么如果使用相同的对象2x.Oops,则可能会弄乱共享成员变量!对于那些期待。。。我忘了在语句“return”TimeOut“之前终止线程。当webservice返回时,它仍然会结束,但如果再次调用,则如果使用相同的对象2x,可能会弄乱共享成员变量。
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