DisableOptimizationsScheduler.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
  2. using System;
  3. using System.Linq;
  4. #if !NO_WEAKTABLE
  5. using System.Runtime.CompilerServices;
  6. #endif
  7. namespace System.Reactive.Concurrency
  8. {
  9. class DisableOptimizationsScheduler : SchedulerWrapper
  10. {
  11. private readonly Type[] _optimizationInterfaces;
  12. public DisableOptimizationsScheduler(IScheduler scheduler)
  13. : base(scheduler)
  14. {
  15. _optimizationInterfaces = Scheduler.OPTIMIZATIONS;
  16. }
  17. public DisableOptimizationsScheduler(IScheduler scheduler, Type[] optimizationInterfaces)
  18. : base(scheduler)
  19. {
  20. _optimizationInterfaces = optimizationInterfaces;
  21. }
  22. #if !NO_WEAKTABLE
  23. public DisableOptimizationsScheduler(IScheduler scheduler, Type[] optimizationInterfaces, ConditionalWeakTable<IScheduler, IScheduler> cache)
  24. : base(scheduler, cache)
  25. {
  26. _optimizationInterfaces = optimizationInterfaces;
  27. }
  28. protected override SchedulerWrapper Clone(IScheduler scheduler, ConditionalWeakTable<IScheduler, IScheduler> cache)
  29. {
  30. return new DisableOptimizationsScheduler(scheduler, _optimizationInterfaces, cache);
  31. }
  32. #else
  33. protected override SchedulerWrapper Clone(IScheduler scheduler)
  34. {
  35. return new DisableOptimizationsScheduler(scheduler, _optimizationInterfaces);
  36. }
  37. #endif
  38. protected override bool TryGetService(IServiceProvider provider, Type serviceType, out object service)
  39. {
  40. service = null;
  41. return _optimizationInterfaces.Contains(serviceType);
  42. }
  43. }
  44. }