Timer.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // Licensed to the .NET Foundation under one or more agreements.
  2. // The .NET Foundation licenses this file to you under the Apache 2.0 License.
  3. // See the LICENSE file in the project root for more information.
  4. using System.Reactive.Concurrency;
  5. namespace System.Reactive.Linq
  6. {
  7. partial class AsyncObservable
  8. {
  9. public static IAsyncObservable<long> Timer(TimeSpan dueTime) => Timer(dueTime, TaskPoolAsyncScheduler.Default);
  10. public static IAsyncObservable<long> Timer(TimeSpan dueTime, IAsyncScheduler scheduler)
  11. {
  12. if (scheduler == null)
  13. throw new ArgumentNullException(nameof(scheduler));
  14. return Create<long>(observer => scheduler.ScheduleAsync(async ct =>
  15. {
  16. ct.ThrowIfCancellationRequested();
  17. await observer.OnNextAsync(0L).RendezVous(scheduler);
  18. }, dueTime));
  19. }
  20. public static IAsyncObservable<long> Timer(DateTimeOffset dueTime) => Timer(dueTime, TaskPoolAsyncScheduler.Default);
  21. public static IAsyncObservable<long> Timer(DateTimeOffset dueTime, IAsyncScheduler scheduler)
  22. {
  23. if (scheduler == null)
  24. throw new ArgumentNullException(nameof(scheduler));
  25. return Create<long>(observer => scheduler.ScheduleAsync(async ct =>
  26. {
  27. ct.ThrowIfCancellationRequested();
  28. await observer.OnNextAsync(0L).RendezVous(scheduler);
  29. }, dueTime));
  30. }
  31. public static IAsyncObservable<long> Timer(TimeSpan dueTime, TimeSpan period) => Timer(dueTime, period, TaskPoolAsyncScheduler.Default);
  32. public static IAsyncObservable<long> Timer(TimeSpan dueTime, TimeSpan period, IAsyncScheduler scheduler)
  33. {
  34. if (period < TimeSpan.Zero)
  35. throw new ArgumentOutOfRangeException(nameof(period));
  36. if (scheduler == null)
  37. throw new ArgumentNullException(nameof(scheduler));
  38. throw new NotImplementedException();
  39. }
  40. public static IAsyncObservable<long> Timer(DateTimeOffset dueTime, TimeSpan period) => Timer(dueTime, period, TaskPoolAsyncScheduler.Default);
  41. public static IAsyncObservable<long> Timer(DateTimeOffset dueTime, TimeSpan period, IAsyncScheduler scheduler)
  42. {
  43. if (period < TimeSpan.Zero)
  44. throw new ArgumentOutOfRangeException(nameof(period));
  45. if (scheduler == null)
  46. throw new ArgumentNullException(nameof(scheduler));
  47. throw new NotImplementedException();
  48. }
  49. }
  50. }