Как использовать GetWorkflowNextTimerExpiration в WWF
От: maxidroms Россия  
Дата: 23.05.08 13:57
Оценка:
Как задать это время?
Re: Как использовать GetWorkflowNextTimerExpiration в WWF
От: mrozov  
Дата: 23.05.08 14:11
Оценка: 3 (1)
Здравствуйте, maxidroms, Вы писали:

M>Как задать это время?


Ну, если вы в начале workflow поставите Delay на 30 сек, а в событии ..idle проверите это свойство, то оно, насколько я понимаю, будет равно текущее время + 30 сек.

Если сделаете две параллельных ветки с delay, то вернется значение ближайшего.

В принципе, эта функция просто ищет ближайший по времени таймер.

А изнутри Delay-я это ("как задать") выглядит так:
void IEventActivity.Subscribe(ActivityExecutionContext parentContext, IActivityEventListener<QueueEventArgs> parentEventHandler)
{
    if (parentContext == null)
    {
        throw new ArgumentNullException("parentContext");
    }
    if (parentEventHandler == null)
    {
        throw new ArgumentNullException("parentEventHandler");
    }
    this.IsInEventActivityMode = true;
    base.RaiseEvent(InitializeTimeoutDurationEvent, this, EventArgs.Empty);
    TimeSpan timeoutDuration = this.TimeoutDuration;
    DateTime expiresAt = DateTime.UtcNow + timeoutDuration;
    WorkflowQueuingService service = parentContext.GetService<WorkflowQueuingService>();
    IComparable queueName = ((IEventActivity) this).QueueName;
    TimerEventSubscription item = new TimerEventSubscription((Guid) queueName, base.WorkflowInstanceId, expiresAt);
    service.CreateWorkflowQueue(queueName, false).RegisterForQueueItemAvailable(parentEventHandler, base.QualifiedName);
    this.SubscriptionID = item.SubscriptionId;
    Activity parent = this;
    while (parent.Parent != null)
    {
        parent = parent.Parent;
    }
    ((TimerEventSubscriptionCollection) parent.GetValue(TimerEventSubscriptionCollection.TimerCollectionProperty)).Add(item);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.