Presentation is loading. Please wait.

Presentation is loading. Please wait.

Reactive Extensions (Rx) Explained Presenter: Kevin Grossnicklaus August 5 th, 2011.

Similar presentations


Presentation on theme: "Reactive Extensions (Rx) Explained Presenter: Kevin Grossnicklaus August 5 th, 2011."— Presentation transcript:

1 Reactive Extensions (Rx) Explained Presenter: Kevin Grossnicklaus August 5 th, 2011

2

3 Agenda Introductions Talk Additional Resources Conclusion

4 Introductions Kevin Grossnicklaus www.architectnow.net www.architectnow.net – ArchitectNow- www.architectnow.net (2009-Present)www.architectnow.net President – Washington University - CAIT Program (2003-2010) Instructor www.SSEinc.com www.SSEinc.com – SSE - www.SSEinc.com (1999-2009)www.SSEinc.com Chief Architect Software Development Practice Leader kvgros@architectnow.net kvgros@architectnow.net Email: kvgros@architectnow.netkvgros@architectnow.net @kvgros @kvgros Twitter: @kvgros@kvgros blog.architectnow.net blog.architectnow.net Blog: blog.architectnow.netblog.architectnow.net

5 EXPECTATIONS

6 Expectations Experience with.NET development – Samples will be in C# 4.0 – VS 2010 will be used Basic familiarity with LINQ and some Async programming Lambda Expressions will be used

7 INTRODUCTION TO RX

8 IEnumerable/IEnumerator interface IEnumerable { IEnumerator GetEnumerator(); } interface IEnumerator : IDisposable { bool MoveNext(); T Current { get; } void Reset(); }

9 Iterating Collections var items = new string[] { “Hello”, “World” }; foreach (var x in items) { //interact with each piece of data } //we can now assume we are done //we must also handle exceptions

10 IObservable/IObserver interface IObservable { IDisposable Subscribe(IObserver observer); } interface IObserver { void OnNext(T value); void OnError(Exception ex); void OnCompleted(); }

11 IObservable/IObserver var _data = new string[] { "Hello", "World" }; var _observable = _data.ToObservable(); var _observer = _observable.Subscribe(x => Console.WriteLine(x)); var _observer2 = _observable.Subscribe( x => Console.WriteLine(x), () => Console.WriteLine("Completed")); var _observer3 = _observable.Subscribe( x => Console.WriteLine(x), ex => Console.WriteLine("Exception: " + ex.Message), () => Console.WriteLine("Completed")); _observer2.Dispose();

12 Getting Rx Installed NuGet – Easiest and quickest Rx Home Page: – http://msdn.microsoft.com/en-us/data/gg577609 http://msdn.microsoft.com/en-us/data/gg577609 Simply add a reference to: – System.Reactive.DLL Available for: – Full Framework (WPF, WinForms, server side ASP.NET, MVC, etc) – Silverlight 3 and 4 – JavaScript – Windows 7 Phone – Xbox/XNA

13 OBSERVABLE EXTENSIONS

14 Subjects using System.Reactive.Subjects; var _subject = new Subject (); var _observer = _subject.Subscribe(x => Console.WriteLine(x)); _subject.OnNext("Rx"); _subject.OnNext("will"); _subject.OnNext("save"); _subject.OnNext("me"); _subject.OnNext("some"); _subject.OnNext("headaches"); _subject.OnCompleted(); _observer.Dispose();

15 Subscribing public static class ObservableExtensions { public static IDisposable Subscribe (this IObservable source); public static IDisposable Subscribe (this IObservable source, Action onNext); public static IDisposable Subscribe (this IObservable source, Action onNext, Action onError); public static IDisposable Subscribe (this IObservable source, Action onNext, Action onCompleted); public static IDisposable Subscribe (this IObservable source, Action onNext, Action onError, Action onCompleted); }

16 Creation of Observables //simply call OnComplete var empty = Observable.Empty (); //Call OnNext(“Value”) and then call OnComplete var obReturn = Observable.Return("Value"); //Raise no events var never = Observable.Never (); //Call OnException with the specified expection var throws = Observable.Throw (new Exception()); //Specify a delegate to be called when anyone subscribes var createSample = Observable.Create ( observable => { observable.OnNext("a"); observable.OnNext("b"); observable.OnCompleted(); return () => Console.WriteLine("Observer has unsubscribed"); });

17 Creation of Observables (Cont…) //Create a range of numbers var range = Observable.Range(10, 15); //publish a count from 0 every specified time period var interval = Observable.Interval(TimeSpan.FromMilliseconds(250)); //Never call “Next” but call “Complete” when the long running operation is done var longOperation = Observable.Start( x =>..do something that takes awhile.. ); //Generate a collection much like for (i=5, i<15, i+3) return i.ToString(); var generated = Observable.Generate(5, i => i i.ToString(), i => i + 3); //simply convert an existing collection or array (IEnumerable) to IObservable var converted = MyCollection.ToObservable();

18 Rx LINQ Operators Where Select First FirstOrDefault Last LastOrDefault Single Count Min Max Sum Where GroupBy Take TakeUntil Skip DistinctUntilChanged Buffer Throttle Sample Delay Until TimeOut..etc…etc…etc…

19 RX AND.NET EVENTS

20 The “Old Way” txtSample.TextChanged += new TextChangedEventHandler(txtSample_TextChanged); //txtSample.TextChanged - = new TextChangedEventHandler(txtSample_TextChanged); private string _lastValue = string.Empty; void txtSample_TextChanged(object sender, TextChangedEventArgs e) { var _currentValue = ((TextBox)sender).Text; if (_currentValue.Length > 5 && _currentValue != _lastValue) { _lastValue = _currentValue; lstData.Items.Add(_currentValue); }

21 The “New Way” var _textChanged = Observable.FromEventPattern (txtSample, "TextChanged").Select(x => ((TextBox)x.Sender).Text); var _longText = _textChanged.Where(x => x.Length > 5).DistinctUntilChanged().Throttle(TimeSpan.FromSeconds(.5)); _longText.ObserveOnDispatcher().Subscribe(x => lstData.Items.Add(x));

22 ADDITIONAL TOPICS

23 Additional Topics Threading – Scheduler Async Pattern Attaching/Detaching When should I use Rx?

24 FINAL THOUGHTS

25 Additional Resources Rx Homepage – http://msdn.microsoft.com/en-us/devlabs/gg577609 http://msdn.microsoft.com/en-us/devlabs/gg577609 Rx Beginners Guide (Tutorials, Videos, etc) – http://msdn.microsoft.com/en-us/devlabs/gg577611 http://msdn.microsoft.com/en-us/devlabs/gg577611 Great Keynote Overview – http://channel9.msdn.com/posts/DC2010T0100-Keynote-Rx-curing-your-asynchronous- programming-blues http://channel9.msdn.com/posts/DC2010T0100-Keynote-Rx-curing-your-asynchronous- programming-blues Team Blog – http://blogs.msdn.com/b/rxteam/ http://blogs.msdn.com/b/rxteam/ Community Rx Wiki – http://rxwiki.wikidot.com/ http://rxwiki.wikidot.com/ Channel 9 Videos – http://channel9.msdn.com/tags/Rx/ http://channel9.msdn.com/tags/Rx/ RxSandbox – http://mnajder.blogspot.com/2010/03/rxsandbox-v1.html http://mnajder.blogspot.com/2010/03/rxsandbox-v1.html Great Blog Series by Lee Campbell – http://leecampbell.blogspot.com/2010/08/reactive-extensions-for-net.html http://leecampbell.blogspot.com/2010/08/reactive-extensions-for-net.html

26 Next Steps… kvgros@architectnow.net Twitter: @kvgros

27


Download ppt "Reactive Extensions (Rx) Explained Presenter: Kevin Grossnicklaus August 5 th, 2011."

Similar presentations


Ads by Google