1
0

VirtualTimeScheduler.Extensions.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
  2. using System.Reactive.Disposables;
  3. namespace System.Reactive.Concurrency
  4. {
  5. /// <summary>
  6. /// Provides a set of extension methods for virtual time scheduling.
  7. /// </summary>
  8. public static class VirtualTimeSchedulerExtensions
  9. {
  10. /// <summary>
  11. /// Schedules an action to be executed at dueTime.
  12. /// </summary>
  13. /// <typeparam name="TAbsolute">Absolute time representation type.</typeparam>
  14. /// <typeparam name="TRelative">Relative time representation type.</typeparam>
  15. /// <param name="scheduler">Scheduler to execute the action on.</param>
  16. /// <param name="dueTime">Relative time after which to execute the action.</param>
  17. /// <param name="action">Action to be executed.</param>
  18. /// <returns>The disposable object used to cancel the scheduled action (best effort).</returns>
  19. /// <exception cref="ArgumentNullException"><paramref name="scheduler"/> or <paramref name="action"/> is null.</exception>
  20. public static IDisposable ScheduleRelative<TAbsolute, TRelative>(this VirtualTimeSchedulerBase<TAbsolute, TRelative> scheduler, TRelative dueTime, Action action)
  21. where TAbsolute : IComparable<TAbsolute>
  22. {
  23. if (scheduler == null)
  24. throw new ArgumentNullException("scheduler");
  25. if (action == null)
  26. throw new ArgumentNullException("action");
  27. return scheduler.ScheduleRelative(action, dueTime, Invoke);
  28. }
  29. /// <summary>
  30. /// Schedules an action to be executed at dueTime.
  31. /// </summary>
  32. /// <typeparam name="TAbsolute">Absolute time representation type.</typeparam>
  33. /// <typeparam name="TRelative">Relative time representation type.</typeparam>
  34. /// <param name="scheduler">Scheduler to execute the action on.</param>
  35. /// <param name="dueTime">Absolute time at which to execute the action.</param>
  36. /// <param name="action">Action to be executed.</param>
  37. /// <returns>The disposable object used to cancel the scheduled action (best effort).</returns>
  38. /// <exception cref="ArgumentNullException"><paramref name="scheduler"/> or <paramref name="action"/> is null.</exception>
  39. public static IDisposable ScheduleAbsolute<TAbsolute, TRelative>(this VirtualTimeSchedulerBase<TAbsolute, TRelative> scheduler, TAbsolute dueTime, Action action)
  40. where TAbsolute : IComparable<TAbsolute>
  41. {
  42. if (scheduler == null)
  43. throw new ArgumentNullException("scheduler");
  44. if (action == null)
  45. throw new ArgumentNullException("action");
  46. return scheduler.ScheduleAbsolute(action, dueTime, Invoke);
  47. }
  48. static IDisposable Invoke(IScheduler scheduler, Action action)
  49. {
  50. action();
  51. return Disposable.Empty;
  52. }
  53. }
  54. }