Цель: Реализовать основу для многопоточного сервера приложений.
Результаты: После выполнения работы Вы сможете:
- Обрабатывать множество операций в несколько потоков.
- Останавливать потоки по запросу извне.
- Пусть операция задана интерфейсом
public interface ICommand
{
void Execute();
}
Классы, наследующие интерйес ICommand будем называть Командами.
- Реализовать класс ServerThread и команды по hard и soft завершению потока.
ServerThread может менять свое поведение для обработки следующей Команды.
Исключение, выброшенное из Команды, перехватывается и передается вместе с самой Командой в ExceptionHandler (см. ЛР №5) Примечание. Наличие реализованного обработчика исключений не обязательно для выполнения данной задачи.
- Команда HardStop приводит к немедленной остановке потока, несмотря на, что в очереди потока есть еще Команды.
- Команда SoftStop останавливает поток, когда в очереди потока закончатся все Команды.
Команды HardStop и SoftStop успешно выполняются только в потоке, который они должны остановить, в противном случае выбрасывают исключение.
Отсутствие Команд в очереди потока не должно требовать значительных затрат процессорного времени. Значительными считаются затраты, которые зависят от времени простоя потока.
- Написать тесты, которые гарантируют правильное выполнение команд HardStop и SoftStop.
- Оформлен PR на ветку task17 - 1 балл.
- Задание выполнено корректно - 2 балла.
- У преподавателя нет вопросов к качеству написанного кода - 2 балла.
- Рихтер Дж. - "CLR via C#. Программирование на платформе Microsoft .NET Framework 4.5 на языке C#" (Глава о многопоточности)
- Элбакидзе А. - "Параллельное и конкурентное программирование на языке C#"
- Троелсен Э., Джепикс Ф. - "Язык программирования C# 10 и .NET 6" (Глава о параллелизме)
- Дэвис С. - "Асинхронное программирование в C# 5.0"
- Клир Дж. - "Concurrency in C# Cookbook" (O’Reilly)
- Блох Дж. - "Effective C#" (Главы о многопоточности и асинхронности)
- MSDN / Microsoft Docs
- Stephen Cleary – Блог о многопоточности в .NET