Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
2 / 1 / 4
Регистрация: 10.05.2018
Сообщений: 35

Возможно ли исключение ведущее к крашу Monitor.Exit внутри finally?

05.09.2018, 05:05. Показов 1413. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static void Count()
    {
        try
        {
            Monitor.Enter(locker);
            x = 1;
            for (int i = 1; i < 9; i++)
            {
                Console.WriteLine("{0}: {1}", Thread.CurrentThread.Name, x);
                x++;
                Thread.Sleep(100);
            }
        }
        finally
        {
            Monitor.Exit(locker);
        }
    }
кусок кода взят со стороннего сайта.
Вопрос в следующем, есть ли исключения Monitor.Enter(locker);, которые в последствии запустят finally и приведут к крашу на строчке Monitor.Exit(locker);. Заранее спасибо за ответ.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.09.2018, 05:05
Ответы с готовыми решениями:

Возникло исключение: SystemExit 0 -- sys.exit (0)
Здравствуйте снова. У меня появилась проблема в этом коде. Помогите пожалуйста! if (send == 'Y') or (send == 'y'): check =...

Сокеты - возможно ли исключение?
Здравствуйте ! Возник небольшой, но по моему мнению важный вопрос по сокетам. В каких случаях Socket.BeginConnect может бросать...

Окно со стилем рамки bsNone ведущее себя, как bsSizeable
Подскажите, какие API-функции использовать для эмуляции полноценного окна. Конкретно интересует обработка Win+стрелки и &quot;удары&quot; о...

20
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
05.09.2018, 05:10
StrongCat, а он до finally и не дойдёт - помрёт прям в try;
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
05.09.2018, 09:31
ThreadAbortException, ThreadInterruptedException. Может ещё какие.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.09.2018, 09:53
StrongCat, свежие компиляторы при использовании конструкции lock() разворачивают ее несколько иначе.
C#
1
2
3
4
5
6
7
bool lockTaken = false;
try
  {
Monitor.Enter (_locker, ref lockTaken);
// Выполнить необходимые действия...
  }
finally { if (lockTaken) Monitor.Exit (_locker); }
2
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
05.09.2018, 09:59
TopLayer, Абсолютно любое исключение не будет перехвачено ничем и будет выброс прям из try. В finally поток не идёт потом.
0
Эксперт .NET
 Аватар для Usaga
14292 / 9377 / 1352
Регистрация: 21.01.2016
Сообщений: 35,338
05.09.2018, 10:05
Umatkot_Primtep, что?
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
05.09.2018, 10:06
Цитата Сообщение от Usaga Посмотреть сообщение
что
а то
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
05.09.2018, 10:15
Цитата Сообщение от Umatkot_Primtep Посмотреть сообщение
В finally поток не идёт потом.
идёт
0
Эксперт .NET
 Аватар для Usaga
14292 / 9377 / 1352
Регистрация: 21.01.2016
Сообщений: 35,338
05.09.2018, 10:17
Umatkot_Primtep, перефразируйте, а то звучит так, как будто вы сказанули глупость.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
05.09.2018, 10:20
Цитата Сообщение от Umatkot_Primtep Посмотреть сообщение
Абсолютно никакое исключение ни чем не будет перехвачено и, в итоге, будет выброс прям из try. В finally поток не попадёт.
Я просто машинально написал.

Добавлено через 38 секунд
Цитата Сообщение от TopLayer Посмотреть сообщение
идёт
приведите пример, пожалуйста?
0
Эксперт .NET
 Аватар для Usaga
14292 / 9377 / 1352
Регистрация: 21.01.2016
Сообщений: 35,338
05.09.2018, 10:28
Цитата Сообщение от Umatkot_Primtep Посмотреть сообщение
приведите пример, пожалуйста?
Возьмите код из первого поста и попробуйте внутри блока try возбудить исключение.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
05.09.2018, 10:34
Цитата Сообщение от Usaga Посмотреть сообщение
Возьмите код из первого поста и попробуйте внутри блока try возбудить исключение.
Да сделал ещё в самом начале. Ставил сначала Monitor = null, чтобы получить NullReferenceException, а потом, же добавил throw new ThreadInterruptedException();
В отладчике студия показала исключение и завершила работу программы. Точка остановки в finally не сработала.
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
05.09.2018, 10:37
Umatkot_Primtep, https://ideone.com/xPAJhf
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
05.09.2018, 10:39
ВОТ
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
05.09.2018, 10:40
Umatkot_Primtep, и? Там же строка Console.WriteLine("Exception"); отработала.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
05.09.2018, 10:49
TopLayer, Значит, не везде работает, я в тестах проверил - отладчик туда зашёл. Создал exe файл, да, зашёл. Просто консольное пытался проверить - отладчик выкинул, точку остановки не захватил в finally. Почему так?
Пропоролся на отладчике, наверное, настройка какая...
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
05.09.2018, 10:56
Umatkot_Primtep, отладчик по умолчанию останавливается на выбросе исключения, которое не будет обработано. Если нажать после этого кнопку "продолжить", то блок finally выполнится.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
05.09.2018, 11:06
TopLayer, Вот попробуйте просто в консоли пройтись отладчиком.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Threading;
 
namespace Try
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Thread.CurrentThread.Abort();
            }
            finally 
            {
                Console.WriteLine("Exception at " + DateTime.Now);
                Console.ReadKey();
            }
        }
    }
}
У меня не проходит дальше, я нажимал F5, F10, давил кнопку Continue.
А вот в Resharper тесте у меня зашёл в finally.
Конечно, я должен был проверить сначала чисто на exe, перед тем как писать, но мне интересно, почему же я так запоролся?
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
05.09.2018, 11:22
Umatkot_Primtep, ThreadAbortException является одним из "особенных" исключений и просто так не обработать с ним блок finally, чтобы можно было попасть в этот блок нужно добавить catch и там сделать откат Thread.ResetAbort()

описание на msdn метода Abort читайте комментарии которые выделены в синий фоны.
0
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
05.09.2018, 11:22
SeIZVeIZ, Спасибо, я принял, но у меня и тут отладчик "шалит".
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Program
    {
        static void Main(string[] args)
        {
            var test = new Test();
 
            try
            {
                test = null;//BP 1
                var p = test.N;
            }
            finally 
            {
                Console.WriteLine("Exception at " + DateTime.Now);//BP 2
                Console.ReadKey();
            }
 
            Console.ReadKey();//BP 3
        }
    }
 
    class Test
    {
        public int N { get; set; }
    }
Отрабатывает только BP 1
Я нашёл некоторые случаи в интернете, где поток отладчика не входит в блок finally - читаю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.09.2018, 11:22
Помогаю со студенческими работами здесь

Вызываемое исключение возможно приводит к закрытию окна
Здравствуйте, уважаемые форумчане. Столкнулся с одной проблемой, которую думал, что смог решить, но она, вероятно, привела к другой...

Обнаружено исключение. Возможно, оно вызвано расширением
В Visual Studio 2010 Express Edition стала выскакивать такая ошибка при попытке ввода любого символа в листининг программы. Я только...

Почему (за счет чего) исключение внутри Task не рушит приложение?
Привет! Есть метод, который выбрасывает исключение: static void Process() { throw new Exception(); } Если вызвать...

Массив внутри класса static. Выбрасывает исключение на методе .Split
здравствуйте! доделываю ранее заказанную программу. столкнулся с гнпонятным. объявлен класс(часть): public static class LexicalAnalyze ...

Класс внутри класса - возможно ли?
Всем привет! Помогите, пожалуйста, понять следующий текст задания: Непонятен момент про класс date, которым нужно расширить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru