rx for .net

12
Reactive Extensions for .NET, Rx One of the most powerful extensions for .NET Framework Ievgen Olieniev .Net Senior Developer Soft Serve

Upload: dotnetusergroupdnipro

Post on 10-May-2015

1.070 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Rx for .net

Reactive Extensions for .NET, Rx

One of the most powerful extensions for .NET Framework

Ievgen Olieniev.Net Senior Developer

Soft Serve

Page 2: Rx for .net

THE FIRST APPEARANCE IN THE WORLD:

July 2009

Silverligh 3 Toolkit

Unit Tests

Page 3: Rx for .net

CURRENT SITUATION:

.NET 4.0Silverligh 4.0

Includes libraries:• System.CoreEx.dll• System.Interactive.dll• System.Observable.dll• System.Reactive.dll• System.Reactive.Testing.dll

Page 4: Rx for .net

THE ITERATOR PATERN

IEnumerable<T>

• IEnumerator<T> GetEnumerator()

IEnumerator<T>

• bool MoveNext()• Reset()• T Current

Page 5: Rx for .net

PULLING DATA FROM A SOURCE

int[] numbers = new int[] { 20, 31, 5, 16, 22 };

IEnumerable<int> numbersSmallerThan20 = numbers.Where(number => number < 20);

5, 16, break

IEnumerable<int> NaturalNumbers(){

int number = 0;while (true){

yield return number;number++;

}}

0,1,2,3,4,5,6…

Page 6: Rx for .net

REACTIVE PROGRAMMING

button.MouseMove += (s, args) => Debug.WriteLine("You moved the mouse to {0}",

args.GetPosition(button));

“You moved the mouse to 20,3”

“You moved the mouse to 33,12”

“You moved the mouse to 44,18”

DownloadFile("http://www.jeffwilcox.com", (byteArray) => Debug.WriteLine("This file is {0} bytes long.",

byteArray.Length);

“This file is 12323 bytes long.”

Page 7: Rx for .net

EVENTS AND CALLBACKS ARE

SEQUENCES OF DATA!

new MouseEventArgs(new Point(20,3)),new MouseEventArgs(new Point(33,12)),

new MouseEventArgs(new Point(44,18))…

new byte[]{23,211,33,23…}, break

Page 8: Rx for .net

A NEW LOOK AT THE OBSERVER PATTERN

IEnumerable<T>

• IEnumerator<T> GetEnumerator()

IEnumerator<T>

• bool MoveNext()• Reset()• T Current

IObservable<T>

• IDisposable<T> Subscribe(IObserber<T>)

IObserver<T>

• void OnNext()• void OnCompleted()• void OnError(Exception ex)

Page 9: Rx for .net

UNIT TESTING SL UI WITH RX

Rating rating = new Rating();

IObservable<Unit> test = ObservableExtensions      .DoAsync(() => TestPanel.Children.Add(rating)) // add a control to a panel      .WaitFor(TestPanel.GetLayoutUpdated()) // listen to LayoutUpdated event      .DoAsync(() => rating.Value = 1.0) // set a property      .WaitFor(          rating.GetActualValueChanged() // listen to ActualValueChanged event            .SkipWhile(actualValueChangedEvent =>               actualValueChangedEvent.EventArgs.NewValue != rating.Value))       .Assert(() => rating.GetRatingItems().Last().ActualValue == 1.0); // Assert

// run the test and clean up at the endtest.Subscribe(() => TestPanel.Children.Remove(rating));

Page 10: Rx for .net

INFO REFERENCES:

• Introducing Rx (Linq to Events) - http://themechanicalbride.blogspot.com/2009/07/introducing-rx-linq-to-events.html

• A Brief Introduction to the Reactive Extensions for .NET, Rx - http://blogs.msdn.com/b/wesdyer/archive/2009/11/18/a-brief-introduction-to-the-reactive-extensions-for-net-rx.aspx

• First encounters with Reactive Extensions -http://msmvps.com/blogs/jon_skeet/archive/2010/01/16/first-encounters-with-reactive-extensions.aspx

• LINQ to Rx: second impressions - http://msmvps.com/blogs/jon_skeet/archive/2010/01/19/linq-to-rx-second-impressions.aspx

• DevLabs: Reactive Extensions for .NET (Rx) -http://rxwiki.wikidot.com/

Page 11: Rx for .net

DOWNLOAD REFERENCES:

• Rx for Silverlight 4 - http://go.microsoft.com/fwlink/?LinkId=182998

• Rx for .NET Framework 4.0 - http://go.microsoft.com/fwlink/?LinkId=182997

• Rx for JavaScript - http://msdn.microsoft.com/devlabs/ff628422

• Rx for .NET Framework 3.5 SP1 - http://go.microsoft.com/fwlink/?LinkId=182996

Page 12: Rx for .net

Thank You!