我想我在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不会重置。
这是已知的问题吗?有变通办法吗?我是不是错过了什么?
我在反应式扩展论坛上得到了答案。http://social.msdn.microsoft.com/Forums/en-US/rx/thread/8705ddf1-7cd2-41a1-b1b2-47d68f895053