properly cancel the task. the task might not yet start
use only single one source of timeout
test for interrupting
add some explanation
try to manage timeout thread properly