Periodic reminder that the rule Swift Concurrency imposes is "you cannot block a thread to wait for future async work", not "you cannot block a thread". The actual rule is much easier to comply with than the shorter version that gets mistakenly passed around.
Blocking a thread may or may not be the right design for your particular code, but it only violates language requirements if you wait for async work.
One is "might slow down other work", the other is "might never finish".