public void Stop() { if ( null == _thread ) { return; } _stop.Set(); if ( _thread.Join( 10000 ) ) { //blocked? _thread.Abort(); //very bad } _thread = null; _tasks.Clear(); }