N>Допустим у тебя есть функция prime/1(возвращает Ns простое число). Работает слишком долго и блокируют. В случае C# берем код как есть, ставим async, переименовываем в GetPrimeAsync. Если есть желание, но в современном мире multicore уже не обязательно, разбрасываем "await Task.Yield()".
И в чем смысл такого мероприятия? Просто "поставить async" не выйдет — нужно где-то "await". Иными словами, всю программу переписать.
N>В Эрланге надo полностью разбить на процессы.
Для такой простой мелочи разбивать ничего не надо, есть готовая функция в OTP. Но можно написать и вручную, причем это будет выглядеть очень просто, красиво и элегантно. Оригинальная функция ровно так же не будет меняться. Только в месте вызова вместо "call_fun" будет "spawn(fun call_fun)". Все, писанины куда меньше, чем в C#.