/// <summary> /// Processing multiple schedule matches for a statement. /// </summary> /// <param name="handle">statement handle</param> /// <param name="callbackObject">object containing matches</param> /// <param name="services">runtime services</param> public static void ProcessStatementScheduleMultiple( EPStatementAgentInstanceHandle handle, object callbackObject, EPServicesEvaluation services) { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().QTimeCP(handle, services.SchedulingService.Time); } handle.StatementAgentInstanceLock.AcquireWriteLock(); try { if (!handle.IsDestroyed) { if (handle.HasVariables) { services.VariableManagementService.SetLocalVersion(); } if (callbackObject is ArrayDeque <ScheduleHandleCallback> ) { ArrayDeque <ScheduleHandleCallback> callbackList = (ArrayDeque <ScheduleHandleCallback>)callbackObject; foreach (ScheduleHandleCallback callback in callbackList) { callback.ScheduledTrigger(); } } else { ScheduleHandleCallback callback = (ScheduleHandleCallback)callbackObject; callback.ScheduledTrigger(); } // internal join processing, if applicable handle.InternalDispatch(); } } catch (Exception ex) { services.ExceptionHandlingService.HandleException(ex, handle, ExceptionHandlerExceptionType.PROCESS, null); } finally { if (handle.HasTableAccess) { services.TableExprEvaluatorContext.ReleaseAcquiredLocks(); } handle.StatementAgentInstanceLock.ReleaseWriteLock(); if (InstrumentationHelper.ENABLED) { InstrumentationHelper.Get().ATimeCP(); } } }
public static void EvaluateSchedule(SchedulingService service) { ICollection <ScheduleHandle> handles = new LinkedList <ScheduleHandle>(); service.Evaluate(handles); foreach (ScheduleHandle handle in handles) { if (handle is EPStatementHandleCallback) { EPStatementHandleCallback callback = (EPStatementHandleCallback)handle; callback.ScheduleCallback.ScheduledTrigger(null); } else { ScheduleHandleCallback cb = (ScheduleHandleCallback)handle; cb.ScheduledTrigger(null); } } }