Futures

FSharp.Control.Futures это экспериментальная F# библиотека асинхронного программирования, вдохновленная Rust трейтом Future.

Концептуально Future являются таким же примитивом асинхронного программирования как C# Task или F# Async, поэтому если вы знакомы с ними, начать работать с Future'ами должно быть максимально просто.

Особенности дизайна Future

  • Future является "холодной" (вычисление начинается только после явного запуска).
  • Возможность отмеы без явной передачи CancellationToken.
  • Всегда явные точки прерывания.
  • Отсутствие блокировок в базовых комбинаторах.
  • Не требует выделения памяти под обратные вызовы, только выделения самих Future.

Сравнение Task, Async, Future

TaskAsyncFuture
ТипГорячиеХолодныеХолодные
ОтменаЯвный CancellationTokenНеявный CancellationTokenВызов метода отмены
Хвостовая рекурсияНетДаДа