title: try-catch in kotlin coroutine with withContext method
body: <p>I found some documentation arguing about exception handling in Kotlin's coroutines with <code>launch</code> and <code>async</code>. But I could not found the solution dealing with the <code>withContext</code>.</p>
  <p>suppose I have a coroutine like:</p>
  <pre class="lang-kotlin prettyprint-override"><code>fun bar(path: String) {
      viewModelScope.launch {
          val foo = withContext(Dispatchers.IO) {
               foo(path)
          }
      }
  }
  
  fun foo(path: String) {
      // do something...
      val media = MediaMetadataRetriever()
      media.setDataSource(path)  // may throw IllegalArgumentException according to API's doc
      return media.frameAtTime
  }
  </code></pre>
  <p><code>viewModelScope</code> is imported from the <code>lifecycle-viewmodel-ktx</code>'s implementation using a <code>SupervisorJob</code>.</p>
  <p>Where should I put a try-catch block to deal with the IOException here?</p>