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; } } }
public MappingSpanLink(MappingSpanLink next, IMappingSpan span) { this.Next = next; this.Span = span; }