title: How can CoroutineScope(job+Dispatchers.Main) run on the main/UI thread?
body: <p>If the operations inside <code>CoroutineScope(job+Dispatchers.Main){...}</code> run on the main thread then how come it does not violate Android's requirement that slow (blocking) operations (Networking etc.) are not allowed to run on the main/UI thread? I can run blocking operations with this scope and the UI does not freeze at all. </p>
  
  <p>I would be grateful if someone could explain what is happening under the hood. My guess is that it is similar to how JavaScript manages blocking operations with the event loop, but I struggle to find any relevant materials. </p>