synchronize always return a promise, even if it's in progress