title: Coroutine Scope, Suspend and withContext inquiries
body: <p>I have 3 snippet below</p>
  
  <ol>
  <li>Just scope launch</li>
  </ol>
  
  <pre><code>    fun main() = CoroutineScope(Dispatchers.IO).launch { runMe() }
      fun rumMe() = doSomething()
  </code></pre>
  
  <ol start="2">
  <li>scope launch with suspend</li>
  </ol>
  
  <pre><code>    fun main() = CoroutineScope(Dispatchers.IO).launch { runMe() }
      suspend fun rumMe() = doSomething()
  </code></pre>
  
  <ol start="3">
  <li>scope launch with suspend and withContext</li>
  </ol>
  
  <pre><code>    fun main() = CoroutineScope(Dispatchers.IO).launch { runMe() }
      suspend fun rumMe() = withContext(Dispatchers.Default) { doSomething() }
  </code></pre>
  
  <p>I see them being launch in a different thread from the Main, and is run asynchronously not blocking the main thread.</p>
  
  <p>I wonder what's their different? If they are all the same, then 1 is best. If not, when should I use 2 or 3?</p>
  
  <p>I tried reading this, and can't get it clearly <a href="https://medium.com/@elizarov/blocking-threads-suspending-coroutines-d33e11bf4761" rel="nofollow noreferrer">https://medium.com/@elizarov/blocking-threads-suspending-coroutines-d33e11bf4761</a></p>