Size: a a a

2021 February 11

DP

Denis Petukhov in pro.net
If obj does not have a finalizer or the GC has already signaled the finalizer thread to run the finalizer, the call to the SuppressFinalize method has no effect.
источник

DP

Denis Petukhov in pro.net
Вобщем надо сильно прям конкуррент сделать чтобы такой кейс случился
источник

DP

Denis Petukhov in pro.net
Хотя на страниче микрософ в паттерне диспоз супресс в конце делается
источник

A

Anatoly in pro.net
Ну, самое главное, я не понимаю об чём спор. Если все блюдут контракт про повторные вызовы, в том числе и конкурентные, то написать свой не составляет никакого труда. Вот вчера писал перекладывалку из одного цсв в другой. Там два стрима.
public void Dispose() {
   this.stream1.Dispose();
   this.stream2.Dispose();
}
Всё, у вас валидный диспоз, который можно вызывать последовательно дважды, параллельно и т.д.
источник

A

Anatoly in pro.net
Но только в том случае, если все, включая авторов BCL, блюдут этот контракт
источник

A

Anatoly in pro.net
Иначе начинаются приседания с танцами.
источник

SB

S B in pro.net
Anatoly
Ну, самое главное, я не понимаю об чём спор. Если все блюдут контракт про повторные вызовы, в том числе и конкурентные, то написать свой не составляет никакого труда. Вот вчера писал перекладывалку из одного цсв в другой. Там два стрима.
public void Dispose() {
   this.stream1.Dispose();
   this.stream2.Dispose();
}
Всё, у вас валидный диспоз, который можно вызывать последовательно дважды, параллельно и т.д.
тут же рейскондишен, не?
источник

SB

S B in pro.net
или два стрима диспоузятся тредсейфли?
источник

SB

S B in pro.net
(внутри)
источник

A

Anatoly in pro.net
А самое главное, этот спор, строго говоря, не отличается вообще никак от "стоит ли вызывать Dispose у всех объектов, которыми я владею или и так прокатит"
источник

A

Anatoly in pro.net
S B
или два стрима диспоузятся тредсейфли?
В этом магия следования контракту. Если контракт есть и ему все следуют, то каждый стрим диспозится трейдсейфли и всё ок.
источник

A

Anatoly in pro.net
Anatoly
А самое главное, этот спор, строго говоря, не отличается вообще никак от "стоит ли вызывать Dispose у всех объектов, которыми я владею или и так прокатит"
Вот у нас на виндовых тачках прокатывало, а на линуксовых - не прокатило, потому что там %tmp% меньше размером. Так и тут - где-то прокатывает написание херового диспоза, а где-то не прокатит и вы ночью с этим кодом будете разбираться
источник

SB

S B in pro.net
Anatoly
В этом магия следования контракту. Если контракт есть и ему все следуют, то каждый стрим диспозится трейдсейфли и всё ок.
ты еще про порядок локов не сказал. а он имеет значение.
источник

SB

S B in pro.net
если где-то еще есть код который стрим2().Диспоуз() сначала сделает, а потом стрим1
источник

SB

S B in pro.net
то дедлок возможен
источник

SB

S B in pro.net
короче, вопрос конечно сложный.
источник

A

Anatoly in pro.net
S B
если где-то еще есть код который стрим2().Диспоуз() сначала сделает, а потом стрим1
ну предположительно, это твои приватные стримы в филдах, которые ты наружу не отдавал, как бывает в 99% случаев
источник

SB

S B in pro.net
поэтому версия с Intrlocked лучше объективно наивных локов
источник

SB

S B in pro.net
ну это я так, мысли вслух
источник

A

Anatoly in pro.net
Если ты их отдал наружу, то стоит ли их диспозить - не ясно
источник