2010-07-01 77 views
0

我是新的Windows工作流程,並試圖編寫一個長時間運行的過程。
我也試圖限制這個過程可以運行多長時間。
我打電話給WorkflowInvoker.Invoke來觸發我的工作流,通過一個小時間段進行測試。工作流程4 CodeActivity不拋出TimeoutException

如果我嘗試這個特定的活動,這似乎完美。
但是,如果我使用CodeActivity,它似乎完全忽略我的超時。

這是爲什麼?如果CodeActivity過長,我該如何超時?

一個例子與延遲活動的工作:
(在這個例子中拋出TimeoutException異常)

Activity wf = new Sequence() 
{ 
    Activities = 
    { 
     new Delay() 
     { 
      Duration = TimeSpan.FromSeconds(10) 
     }, 
    } 
}; 

try 
{ 
    WorkflowInvoker.Invoke(wf, TimeSpan.FromSeconds(5)); 
} 
catch (TimeoutException ex) 
{ 
    Console.WriteLine(ex.Message); 
} 

一個例子試圖用一個CodeActivity:
(在這個例子中TimeoutException異常不拋出)

public class LongActivity : CodeActivity 
{ 
    protected override void Execute(CodeActivityContext context) 
    { 
     Thread.Sleep(TimeSpan.FromSeconds(10)); 
    } 
} 

Activity wf = new Sequence() 
{ 
    Activities = 
    { 
     new LongActivity() 
    } 
}; 

try 
{ 
    WorkflowInvoker.Invoke(wf, TimeSpan.FromSeconds(5)); 
}  
catch (TimeoutException ex) 
{ 
    Console.WriteLine(ex.Message); 
} 

回答

0

工作流運行時只能在它負責時執行操作,並且如果您的活動需要10秒才能執行或休眠運行時ca不做任何事情。它不會安排任何新的活動,因爲沒有剩餘時間,而是會拋出TimeoutException。

正常情況下,當您長時間運行工作時,您將使用異步活動,帶有書籤的AsyncCodeActivity或NativeActivity,以便運行時受到控制,並可以中止工作流。

相關問題