Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Rx la joya oculta de Net

2,962 views

Published on

Presentación sobre Reactive Extensions (Rx) en la conferencia DotNetSpain 2016 en Madrid.

Published in: Software
  • Be the first to comment

  • Be the first to like this

Rx la joya oculta de Net

  1. 1. #dotNetSpain2016 dotNet Spain Conference 2016
  2. 2. #dotNetSpain2016 Edin Kapić SharePoint Practice Lead @ Sogeti Spain edin@edinkapic.com Rx, la joya oculta de NET
  3. 3. Patrocinadores Colaboradores #dotNetSpain2016
  4. 4. #dotNetSpain2016 ¿Rx? Introducción Rx Observables Sujetos Tratamiento de secuencias ¡Rx! Reimaginando nuestro código Rx en en mundo real Más allá de Rx Agenda
  5. 5. #dotNetSpain2016 Senior Architect & SharePoint Practice Lead sug.cat @ekapic www.edinkapic.com Presidente Autor
  6. 6. #dotNetSpain2016 ¿Rx?
  7. 7. #dotNetSpain2016 Rx (Reactive eXtensions) es una librería .NET que permite hacer programación reactiva
  8. 8. #dotNetSpain2016 Un modelo de programación orientado a flujos de datos y la propagación de los cambios https://en.wikipedia.org/wiki/Reactive_programming
  9. 9. #dotNetSpain2016
  10. 10. #dotNetSpain2016 Rx = Observables + LINQ + Schedulers Rx = LINQ-to-Events IEnumerable = Pull, IObservable = Push
  11. 11. #dotNetSpain2016 • obs.Where(x=>x.ID == 1) • Observable.Create() Extensiones y LINQ • IObservable • IObserver • Subject Flujos y eventos • IScheduler • Dispatchers • Timers Concurrencia
  12. 12. #dotNetSpain2016 NuGet Rx-Main NuGet RxJS-Main NPM Rx System.Reactive
  13. 13. #dotNetSpain2016
  14. 14. #dotNetSpain2016 Rx
  15. 15. static void Main(string[] args) { IObservable<char> obs = "Hello, world!".ToObservable(); obs.Subscribe(x => Console.WriteLine(x)); Console.ReadLine(); }
  16. 16. #dotNetSpain2016 Secuencia (flujo, stream) asíncrona de datos namespace System { public interface IObservable<out T> { IDisposable Subscribe(IObserver<T> observer); } }
  17. 17. #dotNetSpain2016 El consumidor de una secuencia observable namespace System { public interface IObserver<in T> { void OnCompleted(); void OnError(Exception error); void OnNext(T value); } }
  18. 18. Un momento, ¿esto no es algo parecido a… …enumerables? …eventos?
  19. 19. #dotNetSpain2016 IObservable IObserver IEnumerable IEnumerator Push Pull
  20. 20. #dotNetSpain2016 Observable Evento IObservable = Eventos+++
  21. 21. Vale, seguimos con Rx…
  22. 22. #dotNetSpain2016 Subject es IObservable y IObserver a la vez Útil para hacer de proxy entre los “clientes” y el “origen” de datos var subject = new Subject<string>(); subject.Subscribe(value => Console.WriteLine(value)); subject.OnNext("a"); subject.OnNext("b"); subject.OnNext("c");
  23. 23. #dotNetSpain2016 todos los valores de la secuencia el último valor de la secuencia el último resultado de la secuencia al acabar
  24. 24. #dotNetSpain2016 Suscripción var sub = IObservable.Subscribe(…); Fin de suscripción sub.Dispose();
  25. 25. #dotNetSpain2016 
  26. 26. #dotNetSpain2016 Manualmente A partir de otras cosas
  27. 27. Muy bonito, pero no le veo la utilidad
  28. 28. #dotNetSpain2016
  29. 29. #dotNetSpain2016 Filtrar Combinar Mapear Reducir Where(x== 2) Merge() Select(f(x)) Sum()
  30. 30. Filtrar Agrupar Valores únicos Partición http://freecontent.manning.com/animated- gifs/?s=reactive-extensions
  31. 31. #dotNetSpain2016 Select SelectMany Select(x.ToLetter) Select(x.FromAToLetter)
  32. 32. #dotNetSpain2016 Count, Min, Max, Sum, Average escalar First, Last, Single elemento Aggregate, Scan Función Sum()
  33. 33. Un momento, no he visto nada de “secuencias en el tiempo” todavía…
  34. 34. #dotNetSpain2016 Concat SwitchMerge
  35. 35. #dotNetSpain2016 public interface IScheduler { DateTimeOffset Now { get; } IDisposable Schedule<TState>(TState state, Func<IScheduler, TState, IDisposable> action); IDisposable Schedule<TState>(TState state, DateTimeOffset dueTime, Func<IScheduler, TState, IDisposable> action); IDisposable Schedule<TState>(TState state, TimeSpan dueTime, Func<IScheduler, TState, IDisposable> action); }
  36. 36. #dotNetSpain2016 • new Thread(() => { /* do work */ }).Start() • ThreadPool.QueueUserWorkItem(_ => { /* do work */ }, null) • Task.Factory.StartNew(() => { /* do work */ }) • syncCtx.Post(_ => { /* do work */ }, null) • Dispatcher.BeginInvoke(() => { /* do work */ }) • scheduler.Schedule(() => { /* do work */ })
  37. 37. #dotNetSpain2016 La mayoría de las operaciones de Rx usan schedulers
  38. 38. #dotNetSpain2016
  39. 39. #dotNetSpain2016 • ImmediateScheduler • CurrentThreadScheduler • NewThreadScheduler • EventLoopScheduler • HistoricalScheduler • ControlScheduler • DispatcherScheduler • SynchronizationContextScheduler • TaskPoolScheduler • ThreadPoolScheduler Implementados por la plataforma
  40. 40. #dotNetSpain2016 http://blogs.msdn.com/b/rxteam/archive/2012/06/14/testing-rx-queries-using-virtual-time-scheduling.aspx
  41. 41. #dotNetSpain2016 SubscribeOn ObserveOn
  42. 42. #dotNetSpain2016 ¡Rx!
  43. 43. #dotNetSpain2016 Código que gestiona llamadas asíncronas o eventos Código que manipula secuencias asíncronas de datos https://github.com/AdaptiveConsulting/ReactiveTrader
  44. 44. #dotNetSpain2016
  45. 45. #dotNetSpain2016
  46. 46. #dotNetSpain2016 Ix (Interactive Expressions)
  47. 47. #dotNetSpain2016 IQbservable<T>
  48. 48. #dotNetSpain2016 Tx
  49. 49. #dotNetSpain2016 ReactiveUI https://github.com/reactiveui
  50. 50. Recursos
  51. 51. #dotNetSpain2016 Código fuente https://github.com/Reactive-Extensions/Rx.NET https://github.com/ekapic/Rx-Dns2016 Tutoriales http://introtorx.com/ http://reactivex.io https://msdn.microsoft.com/en-us/data/gg577609 https://manning.com/books/reactive-extensions-in-action
  52. 52. Q&A #dotNetSpain2016 http://aka.ms/DOTNETT7S5
  53. 53. No olvides realizar la encuesta ¡Gracias! #dotNetSpain2016 Edin Kapić SharePoint Practice Lead @ Sogeti Spain edin@edinkapic.com http://aka.ms/DOTNETT7S5

×