Подтвердить что ты не робот

Является ли асинхронным в С# ту же реализацию, что и в F #?

Является ли асинхронная реализация в С# 4.5 точно такой же, как в F # 2 в том, как используются потоки?

4b9b3361

Ответ 1

Они разные. Основное отличие состоит в том, что С# использует стандартный .NET Task<T> для представления асинхронных вычислений, а F # использует свой собственный тип под названием Async<T>.

В частности, ключевыми отличиями являются:

  • Асинхронный метод С# создает Task<T>, который сразу же запускается (горячая модель задачи), в то время как F # создает вычисление, которое нужно начинать явно (модель генератора). Это означает, что вычисления F # легче компилировать (вы можете писать абстракции более высокого уровня).

  • В F # вы также получаете лучший контроль над тем, как начинается вычисление. Вы можете начать вычисление с помощью Async.Start, чтобы запустить его в фоновом режиме или Async.StartImmediate, чтобы запустить его в текущем потоке.

  • Асинхронные рабочие процессы F # автоматически поддерживают отмену, поэтому вам не нужно проходить CancellationToken.

  • Возможно, еще одним следствием первой точки является то, что рабочие процессы F # async также поддерживают хвостовую рекурсию, поэтому вы можете писать рекурсивные рабочие процессы (это не сработает на С#, но С# не использует этот стиль программирования)

Я написал более подробную статью по этой теме: Asynchronous С# и F # (II.): Как они отличаются?