- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
public class CatalogCache : IDIsposable
{
public void Dispose()
{
if (_loadThread != null)
{
if (_loadThread.IsAlive)
_loadThread.Abort();
}
if (_updateThread != null)
{
if (_updateThread.IsAlive)
_updateThread.Abort();
}
}
додиезники такие ламеры...
ILOLD
а то двое на одного не честно
И пояснял на пальцах, почему оно обычно совсем не нужно.
>Породим два потока чтобы грохнуть два потока
Так это ж многопоточно! И быстрей в джва раза!!!
в java это называется Thread.stop() и давным давно задепрекейчено
у нас хорошим тоном считается примерно такая организация задачи для потока при ручной имплементации: Однако даже так сейчас мало кто пишет, ведь есть Executors framework.
Охеренно спроектированная вещь.
На мой взгляд java.util.concurent одна из самых удобных вещей, что есть по дефолту в яве.
Другой вопрос, а как правильно? Ну, если поток сделан, как выше показано, то задать условие для завершения и дальше Join.
Не хватает _loadThread = null; , т.к. Dispose может вызваться и дважды.
Другой момент, что ведь в Dispose нельзя обращаться к объектам, они ведь могут быть уже подчищены сборщиком мусора.
ЧОЧО пока объектом кто-то владее, уборщик его не трогает
> _updateThread.Abort();
жертва аборта...