Необходимо сделать блокировку, ограниченную по времени, например 1 секунду. В теле блокировки я делаю задержку на 2 секунды (умышленно):
Так вот, можно ли каким то образом, прервать выполнение кода внутри тела блокировки по таймауту (принудительно остановить выполнение пункта 2, завершить блокировку), и выкинуть исключение о превышении таймаута?
Вычитал что в шарпе обычный lock(object) { ... } не имеет таймаута, но, есть: Monitor.TryEnter(object, timeout), который, я так подозреваю, проверяет таймаут на этапе постановки в очередь. (так ли это?)
Отдельно поясню по содержимому тела блокировки (всё то что идёт между lock и unlock вызовами) - это не множество мелких операций, а несколько достаточно продолжительных по времени (сферический пример в вакууме - пара вызовов функции скачивания 10ГиБ файла).
Подскажите, есть готовые механизмы или сахар в шарпе, решающие мою задачу, или, всё же, придётся самостоятельно в отдельном потоке мониторить, и по таймауту принудительно завершать поток? (что значительно увеличит объёмы кода и сложность, казалось бы, такой простой вещи)
Для этой задачи нет встроенной фишки, а в Monitor.TryEnter
и в похожих на него методах указывается не время, которое у него есть на работы с заблокированным объектом, а время в течении которого он блокирует текущий поток и пытается получить эту блокировку, если он получает её сразу, то никакой задержки не происходит.
А вашу задачу (если верить сферическому примеру в вакууме), можно реализовать с помощью Thread.Join
указав ему период времени и завершив поток по его истечении.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Переношу код с WPF на Windows Forms и столкнулся с такой проблемойЕсть класс - который получает контекст от основного окна в конструктор
Существует задача: написать свой API для приложения на C#, вопрос очень простой как это лучше реализовать, какие технологии использовать? В процессе...