50 вопросов
Практика
Как модель памяти в C# влияет на многопоточное программирование, и какие основные аспекты этой модели тебе нужно знать как разработчику?
Как метод `Task.Yield()` взаимодействует с планировщиком задач, и в каких ситуациях его обычно используют?
Какие техники синхронизации и примитивы можно использовать, чтобы обеспечить нормальную координацию в асинхронных методах?
Почему традиционный механизм 'lock' не подходит для использования в асинхронном программировании?
Что такое определение неблокирующих вызовов в многопоточном программировании, и почему их обычно предпочитают блокирующим вызовам?
Как atomic операции, вроде тех, что предоставляет класс Interlocked, помогают обеспечить thread safety и координацию в многопоточных приложениях?
Как CancellationToken помогает управлять выполнением потоков и задач в .NET приложении?
Зачем нужен `ThreadLocal<T>`, какие у него основные плюсы и минусы?
Какие ключевые различия между BlockingCollection, ConcurrentBag, ConcurrentQueue и ConcurrentStack в плане их функциональности, применения и потокобезопасности?
Какую роль играет ключевое слово 'volatile' в C# при работе с многопоточными приложениями и как оно влияет на оптимизации компилятора?
В каких ситуациях спинлок наиболее уместен и почему?
Какие основные стратегии и лучшие практики для эффективной реализации многопоточности в C#?
Как 'async' и 'await' позволяют писать асинхронный код без прямого управления потоками?
Какие стратегии можно использовать, чтобы обеспечить безопасный и стабильный обмен данными между потоками в многопоточной среде?
Зачем нужен класс 'Task' в C#, и чем он отличается от обычного потока?
Как использование ThreadPool улучшает эффективность управления потоками по сравнению с ручным созданием и управлением потоками?
Что такое deadlock в многопоточности и какие есть эффективные стратегии, чтобы он не возникал?
Какие основные различия между Monitor, Mutex и Semaphore в плане их функциональности и применения для синхронизации потоков?
Какие механизмы синхронизации доступны в C# для управления одновременным доступом к общим ресурсам?
Какие методы есть в C# для создания и запуска потока, и в чём преимущества использования высокоуровневых абстракций типа Task Parallel Library (TPL) по сравнению с прямым созданием потоков?
Какие проблемы могут возникнуть, когда ты работаешь с событиями в C#, и какие стратегии можно использовать, чтобы их решить?
В чём отличие между `Func<T>`, `Action<T>` и `Predicate<T>` в C#, и в каких ситуациях каждый из них лучше всего использовать?
Какие применения у lambda-выражений в C#, и чем они лучше обычных делегатов?
В чём разница между делегатами и событиями, и как они работают вместе в объектно-ориентированном программировании?
Какие могут быть последствия, если подписчик события выбросит исключение во время вызова события? Как это повлияет на других подписчиков и какие стратегии можно использовать, чтобы справиться с такими ситуациями красиво?
Что такое замыкание в контексте лямбда-выражений и анонимных методов, и как оно влияет на поведение переменных, которые захватываются из окружающей области видимости?
Как ты можешь динамически создавать и манипулировать функциями с помощью lambda-выражений во время выполнения программы?
Какие основные различия между lambda-выражениями и expression trees, и как работа с expression trees может улучшить твою разработку в конкретных ситуациях?
Как компилятор .NET обрабатывает лямбда-выражения во время компиляции, и они превращаются в обычные методы внутри класса?
Что такое event accessors в C#, и как их можно использовать, чтобы настроить логику подписки на событие или отписки от него?
Что такое асинхронное освобождение ресурсов в C# 8.0 и как интерфейс IAsyncDisposable поддерживает эту фишку?
Как использовать SemaphoreSlim, чтобы асинхронно синхронизировать доступ к общему ресурсу?
Что такое асинхронные потоки в C# 8.0 и как интерфейс IAsyncEnumerable улучшает обработку данных в реальном времени?
В каких ситуациях можно вызвать асинхронную функцию без `await`, и что это даст для хода выполнения программы и обработки ошибок?
Зачем нужен Parallel.ForEachAsync и чем он отличается от Parallel.ForEach, когда дело касается асинхронных операций?
Что такое циклы Parallel.For и Parallel.ForEach в TPL, и как ты можешь контролировать их поведение, включая ограничение степени параллелизма и остановку или выход из итераций?
Какая разница между классом 'Parallel' в Task Parallel Library (TPL) и паттерном 'async/await'?
Ты можешь объяснить, что такое cancellation token и описать, как его обычно используют в асинхронном программировании?
Зачем нужен TaskCompletionSource в асинхронном программировании и как он работает?
Как асинхронные методы работают с потоками, и в чём их преимущества в плане использования ресурсов и производительности?
Как работает `ConfigureAwait`, и какие плюсы у использования `ConfigureAwait(false)` в асинхронном программировании?
Как исключения обрабатываются в асинхронных методах и что нужно учитывать при их обработке?
Какие проблемы могут возникнуть, если ты используешь асинхронные методы в конструкторах или финализаторах класса?
Как выполнить несколько асинхронных операций одновременно и ждать, пока все они завершатся?
Какие ключевые различия между типами 'Task', 'Task<T>' и 'ValueTask<T>' в плане их назначения, поведения и характеристик производительности?
Как использование асинхронных операций влияет на call stack, и какие инструменты могут помочь тебе отследить поток асинхронных задач?
Что такое deadlock в асинхронном программировании и какие стратегии можно использовать, чтобы его избежать?
Какие проблемы могут возникнуть, если неправильно использовать 'async' и 'await' в асинхронном программировании?
Какие возможные типы возврата у асинхронного метода, и почему обычно не рекомендуется использовать void как тип возврата?
Можешь объяснить, что такое async и await в C#? И как они помогают писать неблокирующий код и делать приложения более отзывчивыми?