私は Windows ワークフローを初めて使用し、長期実行プロセスを作成しようとしています。
また、このプロセスを実行できる時間を制限しようとしています。
WorkflowInvoker.Invoke を呼び出して、ワークフローをトリガーし、テストのために短いタイムスパンを渡します。
この特定のアクティビティを試してみると、これは完全に機能するようです。
しかし、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);
}