Program.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using System;
  2. using System.Reactive.Linq;
  3. using System.Reactive.Subjects;
  4. using System.Threading.Tasks;
  5. namespace Playground
  6. {
  7. static class Program
  8. {
  9. static void Main()
  10. {
  11. MainAsync().GetAwaiter().GetResult();
  12. Console.ReadLine();
  13. }
  14. static async Task MainAsync()
  15. {
  16. await RangeAsync();
  17. await ReturnAsync();
  18. await SubjectAsync();
  19. await TakeUntilAsync();
  20. await TimerAsync();
  21. }
  22. static async Task RangeAsync()
  23. {
  24. await AsyncObservable.Range(0, 10).SubscribeAsync(Print<int>()); // TODO: Use ForEachAsync.
  25. }
  26. static async Task ReturnAsync()
  27. {
  28. await AsyncObservable.Return(42).SubscribeAsync(Print<int>());
  29. }
  30. static async Task SubjectAsync()
  31. {
  32. var subject = new SequentialSimpleAsyncSubject<int>();
  33. var res = subject.Where(x => x % 2 == 0).Select(x => x + 1);
  34. await res.SubscribeAsync(Print<int>());
  35. for (var i = 0; i < 10; i++)
  36. {
  37. await subject.OnNextAsync(i);
  38. }
  39. await subject.OnCompletedAsync();
  40. }
  41. static async Task TakeUntilAsync()
  42. {
  43. await AsyncObservable.Range(0, int.MaxValue).TakeUntil(DateTimeOffset.Now.AddSeconds(5)).SubscribeAsync(Print<int>()); // TODO: Use ForEachAsync.
  44. }
  45. static async Task TimerAsync()
  46. {
  47. await AsyncObservable.Timer(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2)).Take(5).Select(_ => DateTimeOffset.Now).SubscribeAsync(Print<DateTimeOffset>()); // TODO: Use ForEachAsync.
  48. }
  49. static IAsyncObserver<T> Print<T>()
  50. {
  51. return AsyncObserver.Create<T>(
  52. x =>
  53. {
  54. Console.WriteLine(x);
  55. return Task.CompletedTask;
  56. },
  57. ex =>
  58. {
  59. Console.WriteLine("Error: " + ex);
  60. return Task.CompletedTask;
  61. },
  62. () =>
  63. {
  64. Console.WriteLine("Completed");
  65. return Task.CompletedTask;
  66. }
  67. );
  68. }
  69. }
  70. }