Грубый контекст: система обмена сообщениями, Communicator
отправляет сообщения (увеличивает поле _messagesInTransmission
), получает ACK или NAK в другой поток (уменьшается _messagesInTransmission
).Execute Dispose, только если переменная равна нулю
Если экземпляр Communicator установлен, он должен остановить свой базовый экземпляр транспорта, как только _messagesInTransmission
ударит в нуль в следующий раз.
Как реализовать это поточно-безопасным способом?
public void Dispose()
{
_state = State.Stopping; // immediately change state in order to prevent additional messages to be sent
// TODO: wait for _messagesInTransmission to become zero
}
Поддерживает ли .NET Framework эту задачу?
Простое решение будет некоторое время (_mIT! = 0) петли и некоторые Thread.Sleep, однако, я хочу писать более привлекательным код, если это возможно.
Передача сообщения происходит в другом потоке? – Jacob
Скорее всего, я использую фреймворк на базе Microsoft CCR под капотом. –
Имейте в виду, что в руководстве по внедрению 'IDisposable' указано, что на один и тот же объект должны быть разрешены несколько вызовов' Dispose'. –