Рабочий процесс 4 CodeActivity не выбрасывает TimeoutException - PullRequest
0 голосов
/ 01 июля 2010

Я новичок в Windows Workflow и пытаюсь написать длительный процесс.
Я также пытаюсь ограничить продолжительность этого процесса.
Я звоню 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);
}

1 Ответ

0 голосов
/ 01 июля 2010

Среда выполнения рабочего процесса может предпринимать действия только тогда, когда она отвечает, и если ваша деятельность выполняется в течение 10 секунд или находится в спящем режиме, среда выполнения ничего не может с этим поделать.Однако он не будет планировать какие-либо новые действия, поскольку оставшегося времени не осталось, и вместо этого будет выдано исключение TimeoutException.

Обычно, когда вы выполняете длительную работу, вы используете асинхронное действие, AsyncCodeActivity или NativeActivity сзакладка, позволяющая контролировать время выполнения и прерывать рабочий процесс.

...