Multiple background tasks registered on iOS doesn't work

I'm trying to make use of the background tasks to prefetch content while the app is in background. It works fine for a single task. When multiple tasks are registered (for different refresh intervals), only the first one is getting triggered. Not sure what I'm missing. I have posted few code blocks from a sample app I'm trying to build.

Following is the list of identifiers defined in Info.plist.

<key>BGTaskSchedulerPermittedIdentifiers</key>
	<array>
		<string>com.mycompany.myapp.task.refresh3</string>
		<string>com.mycompany.myapp.task.refresh2</string>
		<string>com.mycompany.myapp.task.refresh1</string>
	</array>

Below is basically how I'm trying to make it work.

@objc func registerTasks() {
        registerTask(Self.backgroundTaskIdentifier1)
        registerTask(Self.backgroundTaskIdentifier2)
        registerTask(Self.backgroundTaskIdentifier3)
    }
private func registerTask(_ identifier: String) {
    BGTaskScheduler.shared.cancel(taskRequestWithIdentifier: identifier)
    let isRegistered = BGTaskScheduler.shared.register(forTaskWithIdentifier: identifier, using: queue) { task in
        self.refresh(identifier: identifier)
        task.setTaskCompleted(success: true)
        self.scheduleAppRefresh(identifier: identifier)
    }
    if isRegistered {
        scheduleAppRefresh(identifier: identifier)
    }
}

`

@objc func scheduleAppRefresh(identifier: String) {
        let request = BGAppRefreshTaskRequest(identifier: identifier)
        if identifier == Self.backgroundTaskIdentifier1 {
            let newDate = Date(timeIntervalSinceNow: 1 * 60 * 60)
            request.earliestBeginDate = newDate
        } else if identifier == Self.backgroundTaskIdentifier2 {
            let newDate = Date(timeIntervalSinceNow: 2 * 60 * 60)
            request.earliestBeginDate = newDate
        } else if identifier == Self.backgroundTaskIdentifier3 {
            let newDate = Date(timeIntervalSinceNow: 3 * 60 * 60)
            request.earliestBeginDate = newDate
        }

        do {
            try BGTaskScheduler.shared.submit(request)
            UserDefaultsmanager.shared.setTime(time: "refresh scheduled for: \(identifier)")
        } catch {
            UserDefaultsmanager.shared.setTime(time: "Couldn't schedule app refresh")
        }
    }