Я знал о Rx уже несколько лет, но никогда не использовал его, однако теперь у меня есть сценарий, в котором я думаю, что он может быть полезен.
У меня есть класс, который читает данные из внешнего инструментасотни раз в секунду.Второй класс должен взять «образец» этих данных, каждую (скажем) полсекунды.В настоящее время я делаю что-то вроде этого: -
public class DataCollector
{
private DataProcessor _processor;
public void DataCollectionMethod()
{
while (true)
{
var data = GetDataFromInstrument();
_processor.ProcessData(data);
}
}
}
public class DataProcessor
{
DateTime _lastProcessTime;
public void ProcessData(int[] data)
{
if (DateTime.Now.Subtract(_lastProcessTime).TotalMilliseconds > 500)
{
.. do something with the data
_lastProcessTime = DateTime.Now;
}
}
}
Можно ли изменить этот код для использования Rx и регулирования?Итак, это не самое сложное из решений в его нынешнем виде, но я думаю, что регулирование Rx может сделать код немного чище и более «самоописываемым».
Одно предостережение - в реальной системеКласс DataCollector
является чем-то вроде «черного ящика», и хотя я могу его изменить, важно, чтобы он оставался свободным от «знания о времени», которое должно находиться в DataProcessor
.