2010-04-19 80 views

回答

1

有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

相關問題