using System.Collections.Generic;
using System.Reactive.Linq;
using System.Reactive.Subjects;
using System.Threading.Tasks;
private static Subject<string> _queue = new Subject<string>();
var insertObserver = new AnonymousObserver<IList<string>>(x => {
Console.WriteLine($"Generic Bulk insert: {(string.Join(",", x))}");
var numberQueue = new Subject<string>();
var addressQueue = new Subject<string>();
numberQueue.OnNext($"{x}-Entity-Number-1");
numberQueue.OnNext($"{x}-Entity-Number-2");
addressQueue.OnNext($"{x}-Entity-Address-1");
addressQueue.OnNext($"{x}-Entity-Address-2");
addressQueue.OnNext($"{x}-Entity-Address-3");
.Select(x => $"{x}-Entity")
var matterQueue = _queue.Where(x => x[0] == 'b').Select(x => $"{x}-Matter").Buffer(5);
var workItemQueue = _queue.Where(x => x[0] == 'c').Select(x => $"{x}-WorkItem").Buffer(5);
var otherQueue = _queue.Where(x => x[0] != 'a' && x[0] != 'b' && x[0] != 'c')
.Select(x => $"{x}-Other")
entityQueue.Subscribe(insertObserver);
matterQueue.Subscribe(insertObserver);
workItemQueue.Subscribe(insertObserver);
otherQueue.Subscribe(insertObserver);
numberQueue.Buffer(5).Subscribe(insertObserver);
addressQueue.Buffer(5).Subscribe(insertObserver);
foreach (var data in GetData().Take(500).ToList()) {
public static IEnumerable<string> GetData() {
yield return Guid.NewGuid().ToString("n").Substring(0, 6);