- Создать класс который реализует логику пула потоков:
- Создает указанное количество потоков в конструкторе.
- Содержит очередь задач в виде делегатов без параметров.
- Обеспечивает постановку в очередь и последующее выполнение. Возвращаемое значение void.
- Реализовать консольную программу, которая:
- Принимает в параметре командой строки путь к исходному и целевому каталогам на диске.
- Выполняет параллельное копирование всех файлов из исходного каталога в целевой.
- Выполняет операции копирования параллельно с помощью пула потоков.
- Дожидается окончания всех операций копирования и выводит в консоль информацию о количестве скопированных файлов.
- Создать класс на языке C#, который:
- называется
Mutexи реализует двоичный семафор с помощью атомарной операцииInterlocked.CompareExchange; - обеспечивает блокировку и разблокировку двоичного семафора с помощью public-методов
LockиUnlock.
- Создать класс на языке C#, который:
- называется
OSHandleи обеспечивает автоматическое или принудительное освобождение заданного дескриптора операционной системы; - содержит свойство
Handle, позволяющее установить и получить дескриптор операционной системы; - реализует метод
Finalizeдля автоматического освобождения дескриптора; - реализует интерфейс
IDisposableдля принудительного освобождения дескриптора.
- Реализовать консольную программу на языке C#, которая:
- принимает в параметре командной строки путь к сборке .NET(EXE- или DLL-файлу);
- загружает указанную сборку в память;
- выводит на экран полные имена всех public-методов этой сборки, упорядоченные по пространству имен (namespace) и по имени.
- Создать класс
LogBufferна языке C#, который:
- представляет собой журнал строковых сообщений;
- предоставляет метод
public void Add(string item); - буферизирует добавляемые одиночные сообщения и записывает их пачками в конец текстового файла на диске;
- периодически выполняет запись накопленных сообщений, когда их количество достигает заданного предела;
- периодически выполняет запись накопленных сообщений по истечение заданного интервала времени (вне зависимости от наполнения буфера);
- выполняет запись накопленных сообщений асинхронно с добавлением сообщений в буфер.
- Создать статический мештод класса
Parallel.WaitAll, который:
- принимает в параметрах массив делегатов;
- выполняет все указанные делегаты параллельно с помощью пула потоков;
- дожидается окончания выполнения всех делегатов.
- Создать пользовательский атрибут с именем
ExportClass, применимый только к классам, и реализовать консольную программу, которая:
- принимает в параметре командной строки путь к сборке;
- загружает указанную сборку в память;
- выводит на экран полные имена всех public-типов данных этой сборки, помеченные этим атрибутом.
Создать generic-класс DynamicList<T>, который:
- реализует динамический массив с помощью обычного массива
T[]; - имеет свойство
Count, показывающее количество элементов; - имеет свойство
Itemsдля доступа к элементам по индексу; - имеет методы
Add,Remove,RemoveAt,Clearдля соответственно добавления, удаления, удаления по индексу и удаления всех элементов; - реализует интерфейс
IEnumerable<T>.