acquire method
Acquires a permit from this semaphore, asyncronously blocking until one is available.
Implementation
Future acquire() {
var completer = Completer();
if (_currentCount + 1 <= maxCount) {
_currentCount++;
completer.complete();
} else {
_waitQueue.add(completer);
}
return completer.future;
}