cancel{Wait} and wait{Timeout} for AsyncSTM
handle timeouts properly - it's microseconds not milliseconds!