add @synchronized(self) to isCancelled
add isCompleted
update Tests