示例#1
0
        private async void AsyncCallback(object State)
        {
            try
            {
                object[] P = (object[])State;
                ScheduledEventCallbackAsync Callback = (ScheduledEventCallbackAsync)P[0];
                State = P[1];

                await(Callback?.Invoke(State) ?? Task.CompletedTask);
            }
            catch (Exception ex)
            {
                Log.Critical(ex);
            }
        }
示例#2
0
        /// <summary>
        /// Adds an event.
        /// </summary>
        /// <param name="When">When to execute the event.</param>
        /// <param name="Callback">Method called when event is to be executed.</param>
        /// <param name="State">State object bassed to <paramref name="Callback"/>.</param>
        /// <returns>Time when event was scheduled. May differ from <paramref name="When"/> by a few ticks, to make sure the timestamp is unique.</returns>
        public DateTime Add(DateTime When, ScheduledEventCallbackAsync Callback, object State)
        {
            lock (this.events)
            {
                while (this.events.ContainsKey(When))
                {
                    When = When.AddTicks(this.gen.Next(1, 10));
                }

                this.events[When] = new ScheduledEvent(When, Callback, State);
                this.RecalcTimerLocked();
            }

            return(When);
        }
示例#3
0
 /// <summary>
 /// Contains information about a scheduled event.
 /// </summary>
 /// <param name="When">When an event is to be executed.</param>
 /// <param name="EventMethod">Method to call when event is executed.</param>
 /// <param name="State">State object passed on to <paramref name="EventMethod"/>.</param>
 public ScheduledEvent(DateTime When, ScheduledEventCallbackAsync EventMethod, object State)
 {
     this.when        = When;
     this.eventMethod = this.AsyncCallback;
     this.state       = new object[] { EventMethod, State };
 }