Есть ли в C # операция «попытаться заблокировать, пропустить, если истекло время ожидания»?

Вероятно, вам потребуется реализовать метод hashCode в классе Product.

По умолчанию реализация hashCode возвращает местоположение объекта в памяти. Результатом метода hashCode объекта является то, что используется HashMap для идентификации объекта.

В этом случае каждый раз, когда Product извлекается из базы данных с использованием db.getProduct(pid), его местоположение в памяти, вероятно, отличается.

Из-за этого вызов, который HashMap использует для поиска, если существует Product, отличается, и поэтому объект снова добавляется в HashMap.

Чтобы избежать этого, в Product должны быть реализованы методы hashCode и equals. В вашем случае использование чего-то уникального, например ProductID (pid), имеет смысл:

// Assuming pid is public
public int hashCode() {
  return this.pid;
}

public equals(Object object) {
  return this.pid == ((Product)object).pid;
}

Для получения дополнительной информации о том, как реализовать более надежный hashCode, см. https: // stackoverflow. ком / а / 113600/9129020

58
задан Sam 7 September 2014 в 19:51
поделиться

3 ответа

Я полагаю, что можно использовать Monitor.TryEnter() .

оператор блокировки просто переводит в Monitor.Enter() вызов и try catch блок.

39
ответ дан Default 24 November 2019 в 18:43
поделиться

У Ed's есть правильная функция для Вас. Просто не забывайте звонить Monitor.Exit(). Необходимо использовать try-finally блок для гарантии надлежащей очистки.

if (Monitor.TryEnter(someObject))
{
    try
    {
        // use object
    }
    finally
    {
        Monitor.Exit(someObject);
    }
}
95
ответ дан Derek Park 24 November 2019 в 18:43
поделиться

Вы, вероятно, узнаете это для себя теперь, когда другие указали на Вас в правильном направлении, но TryEnter может также взять параметр тайм-аута.

"CLR Jeff Richter Через C#" является превосходной книгой по деталям внутренностей CLR при вхождении в более сложный материал.

3
ответ дан Will Dean 24 November 2019 в 18:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: