Запуск Future используя Runtime
Future можно запустить на Runtime. Runtime это планировщик для нескольких параллельно выполняющихся Future, не используя Future.merge и снимая его ограничения (Future скомбинированные используя Future.merge никогда не выполняются по-настоящему параллельно).
Запустить Future на планировщике можно используя его метод Spawn.
let fut = future { ... }
let fTask = ThreadPoolRuntime.Instance.Spawn(fut)
Spawn возвращает объект запущенной задачи (IFutureTask<'a>). Используя экземпляр запущенной задачи можно преобразовать её в ожидающую выполнения Future используя Await, или прервать её выполнение через Abort. Если задача была прервана, ожидающая Future выбросит исключение при своем запуске.
future {
let fTask = ThreadPoolRuntime.Instance.Spawn(future { ... })
do! doOtherWork ()
let! fTaskResult = fTask.Await()
}
По-умолчанию Await создает Future, вызывающую Abort при своем Drop.
Это можно переопределить вызвав Await с флагом background=true (fTask.Await(true)
).