Удаление объекта, когда переменная не ссылается на него - PullRequest
0 голосов
/ 21 января 2019

У меня есть этот код:

Method1(Method2());

Однако Method2 возвращает объект, который должен быть удален.Вот как я могу справиться с этим:

using (var x = Method2())
{
    await Method1(x);
}

Method1 и Method2 принадлежат фреймворку, и я не могу их изменить.

У меня есть ряд таких случаев.Например, Method2 создает HTTP-запрос, а Methid1 отправляет его.

Опять же, оба метода принадлежат библиотеке, которую я не могу изменить.

Я знаю, что если я не удаляю объект, сборщик мусора в конце концов сделаетэтот.Может быть не скороЯ брожу, если может быть в случае, когда нет какой-либо переменной, которая ссылается на объект (как это будет после возврата Method1), я могу рассчитывать на сборщик мусора, чтобы немедленно избавиться от объекта, и, таким образом, можно использовать оригинальныйкороткий вариант.

1 Ответ

0 голосов
/ 21 января 2019

Используйте выражение using, как вы показали, да, это элегантный способ

using (var something = Method2())
{
   Method1(something);
}

Или, если хотите,

using (var something = Method2())
   Method1(something);

Все остальное будет необычным исбивает с толку (т. е. уничтожает его в вашем методе1) ... Как указано в комментариях, если только это не была какая-то служба команд / запросов или другая зависимость, которая может быть введена одноразовой областью действия

Кроме того, вызовwait в наши дни что-то подозрительно

...