2012-12-11 58 views
1

當我需要在X秒內完成任務並且如果未完成任務時,通常會出現這種情況,我想繼續操作,處理其餘的任務提供任務X的替代方案X完成時間量

我被默認爲是這樣的:

Thread worker = new Thread(() => { 
    // do some long operation 
}); 

Thread monitor = new Thread(() => { 
    Thread.Sleep(10000); 
    if(worker != null && worker.IsAlive) { 
     worker.Abort(); 
     worker = null; 
    } 
    StartNextTask(); 
}); 

monitor.Start(); 
worker.Start(); 

這工作,但它是麻煩,因爲它使用兩個線程(是的,你可以使用Task類以及使用來自線程線程池)。

AutoResetEvent s和event基於模型不太有效,因爲前者阻塞監視器線程直到工作完成,並且event驅動的方法依賴於客戶端調用事件並通知監視器。

是否存在可以遵循相同語義的替代模式?

回答

2

如果您按照您的說法使用Task類,則還可以使用Task.Wait(),它可以完全按照您的需要進行操作。指定等待的秒數。任務不會被取消,除非您通過使用取消令牌取消令牌

請參閱:http://msdn.microsoft.com/en-us/library/dd235606.aspx