Должны ли они быть отдельными программами / скриптами?
Если нет, я бы поместил их в одну и ту же программу и использовал бы асинхронные / агенты для запуска двух задач.
Вот стартер-блог для этой стратегии:
http://blogs.msdn.com/b/dsyme/archive/2010/02/15/async-and-parallel-design-patterns-in-f-part-3-agents.aspx
В основном один агент просто сидит в цикле: асинхронное чтение из канала, цена обновления
Другой агент сидит в циклеСпи какое-то время, читай цену и делай расчет.В качестве альтернативы это может быть просто синхронный цикл «главная программа».
(В зависимости от структуры данных вам может потребоваться или не потребоваться координация для работы с одним оператором, который читает, а другой обновляется.)
На самом деле, вам даже не нужен агент, может быть только асинхронная работа в фоновом режиме.Что-то вроде
// first script
let mutable lastPrice = 0.0
async {
while true do
let! nextval = namedPipe.AsyncRead()
lastPrice <- nextVal
} |> Async.Start
// second script
while true do
System.Threading.Thread.Sleep(1000)
printfn "%f" (calc lastPrice)
, если это поможет.