Reactive Extensions for .NET (Rx) for example.
Rather than attaching even delegates and writing even handlers.
PLINQ and Parallel
This gem?
Or this PLINQ style code?
I remember when it all looked so obvious. Sort of VB on steroids...
Code:
//Create an observable with the initial position and dragged points using LINQ to Events var mouseDragPoints = from md in e.GetMouseDown() let startpos=md.EventArgs.GetPosition(e) from mm in e.GetMouseMove().Until(e.GetMouseUp()) select new { StartPos = startpos, CurrentPos = mm.EventArgs.GetPosition(e), };
PLINQ and Parallel
This gem?
Code:
public static List<R> Filtering<T,R>(IEnumerable<T> source) { var results = new List<R>(); using (SemaphoreSlim sem = new SemaphoreSlim(1)) { Parallel.ForEach(source, () => new List<R>(), (element, loopstate, localStorage) => { bool filter = filterFunction(element); if (filter) localStorage.Add(element); return localStorage; }, (finalStorage) => { lock(myLock) { results.AddRange(finalStorage) }; }); } return results; }
Code:
public static IEnumerable<T> Zipping<T>(IEnumerable<T> a, IEnumerable<T> b) { return a .AsParallel() .AsOrdered() .Select(element => ExpensiveComputation(element)) .Zip( b .AsParallel() .AsOrdered() .Select(element => DifferentExpensiveComputation(element)), (a_element, b_element) => Combine(a_element,b_element)); }
Comment