問題

 fun startAsyncFunc() {
  launch {
    asyncFunc1()
    asyncFunc2()
  }
}

fun asyncFunc1() { ... }
suspend fun asyncFunc2() { ... }
 

私はsuspendなしで作業を終えることができ、テストを容易にすることもできます(runBlockingを追加せずにテストできます)。

私の質問:

  1. asyncFunc1asyncFunc2、どちらが良いのですか?
  2. asyncFunc2が優れている場合は、関数がコルーチンで実行されるたびに常にsuspendを使用する必要がありますか?

更新

Kotlin Coroutinesの最近のリリースでは、メソッドにコルーチンコード(launchasyncなど)が含まれていない場合、コンパイラはThis inspection reports a suspend modifier as redundant if no other suspend functions are called insideと不平を言う。だから私は、suspendは必須であるときにのみ使用する必要があると仮定します。

  ベストアンサー

必要に応じて関数suspendを宣言するだけです。コンパイラが強制しない場合は、suspendを使用しないでください。

ほとんどの場合、機能を停止させる正当な理由がある場合、withContextのようなサスペンド機能を使用する必要があるかもしれないことを意味します。 これにより、関数suspendを宣言します。

関数suspendを宣言すると、あなたの関数がサスペンドしていないときにできる以上のことをすることはできません。もし何かあれば、あなたはあなたの関数の使用を制限しています。

強制されずにサスペンドする機能のための1つのユースケースは、あなたが実際にあなたの機能が複雑に重いことを世界に示したいということです。

  同じタグがついた質問を見る

kotlinkotlin-coroutines