Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Task and monitor / 2 сообщений из 2, страница 1 из 1
06.03.2015, 14:40
    #38897262
sergei64_89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Task and monitor
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
private static object obj = new object();
        static void Main(string[] args)
        {
            Thread.Sleep(1000);
            Task.Run(async() =>
                {
                    Monitor.Enter(obj);
                    await Task.Delay(3000);
                    Console.WriteLine("2");
                    Monitor.Exit(obj);
                }
            );
            Thread.Sleep(1000);
                Monitor.Enter(obj);
                Console.WriteLine("sd");
                Monitor.Exit(obj);
}


Почему приложение зависает?
...
Рейтинг: 0 / 0
06.03.2015, 15:53
    #38897388
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Task and monitor
sergei64_89, после await выполнение может продолжится в другом потоке и значит Monitor.Exit не освободит блокировку, что, в свою очередь, приведет к бесконечному ожиданию при вызове Monitor.Enter в основном потоке.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Task and monitor / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]