If I am writing a function that can call suspendable functions, is there a preference between making that function suspend itself, or defining it on CoroutineScope ? Or in other words, when should one use suspend and when should one use CoroutineScope as a receiver ?