Недавно на ресурсе Medium были опубликованы [две][1] [статьи][2] от одного и того же автора, затрагивающие функциональность C# async/await.
Основными выводами были:
* рекурсивный вызов асинхронного метода в C# подвержен StackOverflowException
* goroutine'ы лучше задач (тасков) в .NET в плане производительности
Но главная проблема вышеприведенных публикаций — абсолютное непонимание модели кооперативной многозадачности в C# с вводом читателей в заблуждение. Сами же бенчмарки — **бессмысленные**, как мы увидим позже.
Далее в статье я попытаюсь раскрыть суть проблемы более подробно с примерами решения.
**TL;DR**
После небольшой правки кода исходных примеров, реализация бенчмарка на .NET оказывается быстрее варианта Go. Попутно решаем проблему переполнения стека у рекурсивных асинхронных методов.
**NB**: использоваться будут свежевыпущенный .NET Core 2.0 и Go 1.8.3.
[Читать дальше →][3]
[1]:
https://medium.com/@alexyakunin/async-recursion-and-some-weirdness-of-design-of-asynchronous-api-in-c-vs-f-a5760a00a26a
[2]:
https://medium.com/@alexyakunin/go-vs-c-part-1-goroutines-vs-async-await-ac909c651c11
[3]:
https://habrahabr.ru/post/336000/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut