[#] Мириады запущенных задач на C#
habrabot(difrex,1) — All
2017-08-21 00:00:04


Недавно на ресурсе 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