Какие рекомендации по очистке ссылок на обработчики событий?

Часто я пишу такой код:

        if (Session != null)
        {
            Session.KillAllProcesses();
            Session.AllUnitsReady -= Session_AllUnitsReady;
            Session.AllUnitsResultsPublished -= Session_AllUnitsResultsPublished;
            Session.UnitFailed -= Session_UnitFailed;
            Session.SomeUnitsFailed -= Session_SomeUnitsFailed;
            Session.UnitCheckedIn -= Session_UnitCheckedIn;
            UnattachListeners();
        }

Цель состоит в том, чтобы очистить все подписки на события, которые мы зарегистрировали для цели (сеанса), чтобы сеанс мог свободно утилизироваться GC. У меня была дискуссия с коллегой о классах, которые реализуют IDisposable, однако, и он был убежден, что эти классы должны преобразовать очистку следующим образом:

    /// <summary>
    /// Disposes the object
    /// </summary>
    public void Dispose()
    {
        SubmitRequested = null; //frees all references to the SubmitRequested Event
    }

Есть ли причина для предпочтения одного другому? Есть ли лучший способ сделать это вообще? (Кроме слабых эталонных событий везде)

То, что я действительно хотел бы видеть, это нечто похожее на шаблон безопасного вызова для вызова событий: то есть безопасный и повторяемый. Что-то, что я могу помнить, чтобы делать каждый раз, когда я присоединяюсь к событию, чтобы я мог убедиться, что мне будет легко убирать.

Ответы на вопрос(6)

Ваш ответ на вопрос