「Rx を使用する」ことで Rx スケジューラのみを使用できるようにする場合、これは非常に簡単な解決策です。
Action<double> action =
x =>
Console.WriteLine(x);
var ts0 = pairs.Select(p => p.Timestamp).Min();
pairs
.ForEach(p =>
Scheduler
.ThreadPool
.Schedule(
p.Timestamp.Subtract(ts0),
() => action(p.Value)));
これはSystem.Interactive
拡張機能を使用しますが、通常のループをForEach
使用してスケジューラをロードすることもできます。foreach
次のダミーデータを使用してコードをテストしました。
var pairs = new []
{
new Pair { Timestamp = new DateTime(2011, 1, 1, 7, 12, 30), Value = 1.1, },
new Pair { Timestamp = new DateTime(2011, 1, 1, 7, 12, 45), Value = 1.2, },
new Pair { Timestamp = new DateTime(2011, 1, 1, 7, 12, 40), Value = 1.3, },
};
これが役立つことを願っています。