private async Task OnGenerateBunchOfPersons(CancellationToken cancellationToken, int personCount) { await Observable.Interval(TimeSpan.FromSeconds(_settingsService.IntervalBetweenGenerationSinglePerson)) .Take(personCount).Do(_ => { var freeFloors = _building.GetNotFullFloors(); var generationFloor = freeFloors.GetRandomElement(); if (generationFloor == null) { return; } var person = GeneratePerson(generationFloor); if (!_building.TryEnterOnFloorToWaitElevator(person, generationFloor)) { //some error handling } }); }