Example #1
0
        private void RaiseEvents(object sender, IMappingSpan span)
        {
            EventHandler <TagsChangedEventArgs> tempEvent = TagsChanged;

            if (tempEvent != null)
            {
                this.TagAggregatorFactoryService.GuardedOperations.RaiseEvent(sender, tempEvent, new TagsChangedEventArgs(span));
            }

            if (this.BatchedTagsChanged != null)
            {
                var oldHead = Volatile.Read(ref this.acculumatedSpanLinks);
                while (true)
                {
                    var newHead = new MappingSpanLink(oldHead, span);
                    var result  = Interlocked.CompareExchange(ref this.acculumatedSpanLinks, newHead, oldHead);
                    if (result == oldHead)
                    {
                        if (oldHead == null)
                        {
                            this.joinableTaskHelper.RunOnUIThread((Action)(this.RaiseBatchedTagsChanged));
                        }

                        break;
                    }

                    oldHead = result;
                }
            }
        }
Example #2
0
 public MappingSpanLink(MappingSpanLink next, IMappingSpan span)
 {
     this.Next = next;
     this.Span = span;
 }