protected readonly object Sync = new();
public Task Me1()
{
lock (Sync)
{
_currentTask = Me2();
}
return _currentTask;
}
private async Task Me2()
{
lock (Sync)
{
_currentTask = null;
return;
}
}
}
Подскажите почему здесь нет дедлока?
Оно спокойно заходит в Me2 и сетает _currentTask = null;
Дак а проблема то в чём? Это логично, что поток не может уйти в дедлок - он держит лок, два раза. И должен два раза ее отпустить.
Не логично. Мы лочим переменную и, пока она в локе, её опять нельзя залочить. Вот это логично
В смысле "и что?". Это вы жалуетесь на то, что поток не может сам себя задедлочить или я? =)
Я ни на что не жалуюсь. Только сказал, что я этого не знал
Уже поправил логику и написал, что не знание этого стоило мне недели
Теперь знаете. Локи, насколько я знаю, работают так везде. Трудно считать это нелогичным, если 1) так везде 2) это средство синхронизации потоков между собой, а не внутри себя
Обсуждают сегодня