0

私は 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);
}
4

1 に答える 1

0

ワークフロー ランタイムは、担当しているときにのみアクションを実行できます。アクティビティの実行またはスリープに 10 秒かかる場合、ランタイムはそれについて何もできません。ただし、残り時間がなく、代わりに TimeoutException がスローされるため、新しいアクティビティはスケジュールされません。

通常、長時間実行される作業がある場合は、非同期アクティビティ (AsyncCodeActivity または NativeActivity のブックマーク付き) を使用して、ランタイムが制御され、ワー​​クフローを中止できるようにします。

于 2010-07-01T19:42:30.007 に答える