Привет, Хаброжители! Асинхронные и многопоточные программы могут выполнять несколько задач одновременно, не теряя скорости или надежности. Но правильная организация параллельного выполнения может вызвать затруднения даже у опытных разработчиков. Эта практическая книга научит вас создавать параллельные приложения на C#, работающие с максимальной скоростью и не имеющие взаимоблокировок и других проблем синхронизации, которые ухудшают производительность и требуют огромных усилий для их обнаружения.

«C# Concurrency» помогает получить полное представление об особенностях многопоточности и асинхронного программирования. В ней особое внимание уделено практическому использованию операторов async/await в C# для упрощения асинхронных задач. Вы научитесь избегать распространенных ошибок, обходить классические проблемы многопоточности, такие как состояния взаимоблокировки и гонки, а также узнаете о многих сложных нюансах управления потоками и использования потокобезопасных коллекций.

Что внутри книги?

  • Многопоточность в .NET и механизмы асинхронного программирования.

  • Когда следует и когда не следует использовать методы параллельного выполнения.

  • Многочисленные примеры использования async/await.

Для опытных программистов на C#. Знание асинхронного программирования не требуется.

Кому адресована эта книга?

Эта книга адресована всем разработчикам на C#, желающим получить дополнительные знания о многопоточном и асинхронном программировании. Информация в этой книге применима к любой версии .NET, .NET Core и .NET Framework, выпущенной после 2012 года, а также к Windows и Linux (но только для .NET Core и .NET 5 и более поздних версий, потому что более ранние версии не поддерживались в Linux).

Основное внимание в издании уделяется разработке серверного программного кода, но кое-где затрагиваются также вопросы, касающиеся разработки приложений с графическим интерфейсом.

Перед вами — русскоязычная версия книги, посвящённой многопоточности и асинхронности в .NET. Темы, поднятые здесь, подробно раскрывают, почему так важно грамотно использовать механизмы потоков и асинхронности для ускорения ваших программ, а также помогают избежать распространённых ошибок. В нашем мире повсеместной цифровизации и бесконечно растущих нагрузок, когда приложения должны обрабатывать тысячи и миллионы запросов в секунду, эта книга как никогда актуальна.

Адаптация этого труда на русский язык — результат совместной работы команды энтузиастов, которые постарались не только локализовать книгу, но и сохранить техническую точность, избегая двусмысленности в формулировках. Мы стремились преодолеть языковой барьер и сделать информацию доступной для всех русскоязычных разработчиков, так или иначе связанных с .NET.

Книга раскрывает не только TPL, взаимодействие с потоками и async/await, но и современные Frozen Collections. Мы постарались максимально сохранить, а где-то и расширить контекст рассматриваемых вопросов, чтобы улучшить ваш читательский опыт.

Мы надеемся, что эта книга станет для вас ценным ресурсом — будь вы начинающий разработчик в процессе знакомства с concurrency или опытный инженер в поисках глубоких знаний и понимания этой области .NET.

- Российское сообщество .NET разработчиков DotNetRu

Об авторе

Нир Добовицки (Nir Dobovizki) — архитектор программного обеспечения и старший консультант. Занимается разработкой параллельных и асинхронных систем (в основном для высокопроизводительных серверов) с конца 1990-х. Хорошо знаком с языками, компилирующимися в машинный код, а с момента появления .NET 1.1 в 2003 году использует .NET и язык C#. Работал с несколькими компаниями в медицинской, оборонной и промышленной отраслях, которым помогал решать проблемы, возникающие из-за неправильного использования многопоточного и асинхронного программирования.

Структура издания

Эта книга состоит из двух частей, которые разбиты на 14 глав.
Часть I охватывает основы многопоточности и async/await в C#:

  • глава 1 знакомит с понятиями и терминологией многопоточного и асинхронного программирования;

  • глава 2 посвящена методам, которые использует компилятор .NET для реализации расширенной функциональности;

  • глава 3 — это глубокое погружение в работу async/await;

  • глава 4 объясняет суть многопоточности;

  • глава 5 связывает вместе все, о чем рассказывалось в главах 3 и 4, и демонстрирует связь async/await и многопоточности;

  • глава 6 рассказывает о том, когда следует использовать операторы async/await, потому что сам факт возможности их использования не означает, что они должны использоваться везде;

  • глава 7 завершает первую часть описанием распространенных ошибок в многопоточном программировании и, что еще важнее, приемов, помогающих их избежать.

Часть II посвящена практическому использованию информации, которую вы узнали в част и I:

  • глава 8 рассказывает об обработке данных в фоновом режиме;

  • глава 9 посвящена прерыванию обработки в фоновом режиме;

  • глава 10 учит создавать сложные асинхронные компоненты, которые делают больше, чем просто объединяют встроенные асинхронные операции;

  • в главе 11 обсуждаются продвинутые варианты использования async/await и потоков;

  • глава 12 поможет устранить проблемы с исключениями в асинхронном коде;

  • глава 13 посвящена потокобезопасным коллекциям;

  • глава 14 показывает, как создавать классы, работающие подобно асинхронным коллекциям

Ознакомиться с оглавлением
Полистать отрывок

Приобрести книгу «C# Concurrency. Асинхронное программирование и многопоточность» можно на нашем сайте.

По факту оплаты бумажной версии книги на e‑mail высылается электронная книга.
Для Хаброжителей скидка 25% по купону — Concurrency

Комментарии (2)


  1. juray
    04.09.2025 16:48

    Асинхронные и многопоточные программы могут выполнять несколько задач одновременно, не теряя скорости

    Для этого принципиально нужно, чтобы каждый поток выполнялся на отдельном физическом процессоре (ядре). При выполнении на одном (хоть при вытесняющей, хоть при кооперативной многозадачности) - неизбежно, что во время когда один из потоков выполняется, остальные простаивают. Более того, добавляются затраты на переключение конекста (и чем чаще переключение, тем суммарные затраты выше).

    И за рамки этого ограничения не прыгнешь. Так что скорость неизбежно теряется (по сравнению с выполнением одной задачи). Но поскольку всегда есть шанс потерять скорость еще больше из-за неудачного кода - то советы, как этого избежать, конечно, полезны.


    1. 0xBE000ACE
      04.09.2025 16:48

      Не совсем так. IOCP на Windows и epoll для Linux очень даже сокращают накладные расходы для современных процессором (20+ лет, по крайней мере).