Предположим, что у меня есть функция сна:
def sleep(delay:Int) : Unit @suspendable = {
....
}
возможно ли иметь функцию будущего, которая создает асинхронную версию функции ожидания, которую можно ожидать синхронно.
def future(targetFunc: (Int => Unit @suspendable)) : (Int => Future) = {
....
}
class Future {
def await : Unit @suspendable = {
....
}
}
вы должны сделать что-то вроде этого:
reset {
val sleepAsync = future(sleep)
val future1 = sleepAsync(2000)
val future2 = sleepAsync(3000)
future1.await
future2.await
/* finishes after a delay of 3000 */
}
два вызова sleepAsync должны появиться сразу, и два вызова Future # ждут должны блокироваться. конечно, все они действительно падают с конца reset, а код после отвечает за вызов продолжения после задержки.
В противном случае существует альтернативный метод одновременного запуска двух параллельных функций @suspendable и ожидания завершения их обоих?
У меня есть компилятивная сущность с каркасом того, что я хочу сделать: https://gist.github.com/1191381