Запуск функций в параллельных потоках

Есть функция, которая имеет входные параметры и совершает действия с ними. Например:

func greetPerson (Person: String) {
    print("Hello, \(Person)!")
}

Как запустить эту функцию много раз в параллельных потоках, причем пользователь вводит количество потоков в начале работы с программой и при этом параметры функции (в данном примере человек, которого мы будем приветствовать) в каждом потоке будут разные.


Ответы (1 шт):

Автор решения: NSA-bot

Не знаю, подойдет ли это для вас. Тут количество потоков не вводится пользователем, а соответствует количеству элементов которые вы будете подставлять в метод (в вашем случае, количество людей). В примере получается три параллельных потока, так как в массиве три имени. Если будет 20 имен, то будет 20 потоков.

let people = ["Вася", "Петя", "Катя"]

func greetPerson(person: String) {
  print("Hello, \(person)!")
}
    
// Метод в цикле выбирает элементы из массива и подставляет в ваш метод, запускаемый каждый раз в новом потоке (все потоки выполняются параллельно).     
func greetings(of people: [String]) {
  for person in people {
    DispatchQueue.global().async {
      greetPerson(person: person) 
    }
  }
}

greetings(of: people)
→ Ссылка