我有一個應用程序,這是一種測試某人,並持續約30分鐘。在程序開始(第三方)期間,我的代碼被調用,我註冊時間並嚮應用程序返回一些信息,並將測試保存爲「正在進行」。C#垃圾收集器的「KeepAlive」和線程
大約30分鐘後,我希望程序回到我身邊並將測試結果發送給我,以便我可以保存並完成該過程。有時候這種情況不會因爲各種原因而發生 所以我在實現一個代碼來啓動一個線程,睡它大約35分鐘(它可以達到的最大持續時間),當它運行它只做一件事:如果測試仍然是「正在進行」,它將其更新爲「失敗」或其他狀態。
不過,我從here讀到C#的垃圾回收器可以收集它假定爲不活動線程,我很擔心這一點,所以我想請問這如何KeepAlive方法使用線程工作,或者如果有任何可靠的方法來測試它(因爲即使我等了所有35分鐘纔會發生,也可能出現GC實際收集線程並且一切都失敗的情況)。
那麼,這個工作的正確方法是什麼?或者如果不是這樣,我該怎麼做?
static void Main(string[] args)
{
//After all the startup functions are done...
Thread thread = new Thread(() => UpdateTest(1));
thread.Start();
//My thread is supposedly safe...?
GC.KeepAlive(thread);
}
static void UpdateTest(int testID)
{
Thread.Sleep(210000); //Sleep for 35min
//Search the database for the testID, update it if it's still ONGOING.
}
會爲長時間運行的進程提供服務來處理這個問題嗎? – JNYRanger 2014-08-27 19:10:34
如果你正在談論jitbit的答案,我懷疑除此之外還有更多。這不是GC ......基本上這個問題是你已經鏈接的問題的重複,不是嗎? – 2014-08-27 19:13:42
@JonSkeet我不認爲它是重複的,因爲我的線程根本不會運行,它會在啓動之前睡眠很長時間,所以基本上這是一個關於jitbit的答案的問題。這就是爲什麼我尋找解決方案並找到了有關KeepAlive方法的原因。 – Danicco 2014-08-27 19:17:01