private static bool MarkedSynchronized(MessageHandlerTuple tuple) { //cache it later return (tuple .Message .GetType() .GetCustomAttributes(typeof(SynchronizedAttribute), false) .Length > 0); }
protected override void Invoke(ref MessageHandlerTuple tuple) { MessageHandlerTuple handlerTuple = tuple; var scheduler = _preserveOrderScheduler; if (MarkedSynchronized(tuple)) { scheduler = SingleThreadScheduler.Instance; } Task.Factory.StartNew(() => InternalInvoke(handlerTuple), CancellationToken.None, TaskCreationOptions.None, scheduler); }
public virtual bool TryInvoke(ref MessageHandlerTuple tuple) { if (HandlerInvoker.IsHandler(ref tuple)) { for (int i = 0; i < _rules.Length; i++) { if (_rules[i].CanDispatch(ref tuple)) { Invoke(ref tuple); return true; } } } return false; }
private void InternalInvoke(MessageHandlerTuple handlerTuple) { base.Invoke(ref handlerTuple); }
protected virtual void Invoke(ref MessageHandlerTuple tuple) { HandlerInvoker.Invoke(ref tuple); }
public bool Equals(MessageHandlerTuple other) { return ReferenceEquals(Message, other.Message) && ReferenceEquals(Handler, other.Handler); }