Я думаю, что нашел ошибку в EventLoopScheduler.Вот модульный тест, который воспроизводит его.
using System;
using System.Threading;
using NUnit.Framework;
using System.Reactive.Concurrency;
namespace EventLoopSchedulerTests {
[TestFixture]
public class EventLoopSchedulerTests {
[Test]
public void TestEventLoopScheduler() {
var scheduler = new EventLoopScheduler();
scheduler.Schedule(TimeSpan.FromMinutes(1), () => { });
Thread.Sleep(1000);
scheduler.Schedule(TimeSpan.FromMinutes(2), () => { });
Thread.Sleep(1000*60);
}
}
}
Если вы запустите этот модульный тест, одно ядро будет работать на 100% в течение одной минуты.
Я посмотрел в коде Reflector и проанализировалэто и я думаю, проблема в том, что ManualResetEvent не сбрасывается, если после «текущего» запланировано второе действие.
Это известная проблема?Есть ли обходной путь?Я что-то упустил?