Изменение продолжительности DelayActivity с другой продолжительностью - PullRequest
0 голосов
/ 06 июля 2010

Моя пользовательская активность имеет задержку, которая должна быть установлена ​​на разные значения в разное время.Первый раз, когда он установлен, это может быть 5 секунд.Во второй раз это может быть 10 секунд и так далее.Как это можно сделать ... У Delay нет лямбды ActivityContext, который позволил бы мне получить переменную рабочего процесса.

Ответы [ 3 ]

1 голос
/ 30 января 2012

Если ваша деятельность основана на NativeActivity, добавьте частную переменную в качестве переменной реализации во время CacheMetadata и установите ее по мере прохождения циклов активности.Что-то вроде:

public class RetryTest : NativeActivity
{
    private Variable<int> count = new Variable<int>("Count", 1);
    private Variable<TimeSpan> delayInterval = new Variable<TimeSpan>("DelayInterval", TimeSpan.FromSeconds(5));
    private Delay delay = new Delay();

    protected override void CacheMetadata(NativeActivityMetadata metadata)
    {
        metadata.AddImplementationVariable(count);
        metadata.AddImplementationVariable(delayInterval);

        delay.Duration = new InArgument<TimeSpan>(delayInterval);

        metadata.AddImplementationChild(delay);
    }

    protected override void Execute(NativeActivityContext context)
    {
        Console.WriteLine("{0} - Execute", DateTime.Now.ToLongTimeString());
        count.Set(context, count.Get(context) + 1);
        context.ScheduleActivity(delay, OnDelayComplete);
    }

    private void OnDelayComplete(NativeActivityContext context, ActivityInstance completedInstance)
    {
        Console.WriteLine("{0} - DelayComplete", DateTime.Now.ToLongTimeString());
        if (count.Get(context) < 3)
        {

            delayInterval.Set(context, TimeSpan.FromSeconds(delayInterval.Get(context).Seconds * count.Get(context)));
            context.ScheduleActivity(delay, OnDelayComplete);
        }
        count.Set(context, count.Get(context) + 1);
    }
}

Это должно вывести

8:49:26 a.m. - Execute
8:49:31 a.m. - DelayComplete
8:49:41 a.m. - DelayComplete
0 голосов
/ 31 января 2012

Хорошо, используйте «TimeSpan.FromSeconds (5 * loopCounter)», как сказал Морис, а затем добавьте действие asign из набора инструментов и установите loopCounter = loopCounter + 5 ...

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

Длительность является выражением TimeSpan.Просто введите формулу, которая приводит к правильному количеству времени.Что-то вроде TimeSpan.FromSeconds (5 * loopCounter)

...