Jak uzyskać oczekiwany Thread.Sleep?

Piszę aplikację związaną z siecią opartą na paradygmacie oczekiwania / uśpienia.

Czasami zdarzają się błędy połączenia, aw moim doświadczeniu opłaca się poczekać jakiś czas i ponowić operację ponownie.

Problem polega na tym, że jeśli używam Thread.Sleep lub podobnej operacji blokowania w await / async, blokuje ona całą aktywność w wątku wywołującego.

Co powinienem zastąpić Thread.Sleep (10000), aby uzyskać taki sam efekt jak

await Thread.SleepAsync(10000)

?

AKTUALIZACJA

Preferuję odpowiedź, która to robi bez tworzenia dodatkowych wątków

questionAnswers(1)

yourAnswerToTheQuestion