LoginSignup
Ryu-Develop
@Ryu-Develop (リュウ)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

非同期関数を同期関数にしたいです

解決したいこと

Flutterでアプリを作成しています。
その中でFuture<void>を戻り値とする関数を作成しましたが、awaitを付けずに使用する場面は想定されないため、awaitのつけ忘れを防ぐためにも、戻り値をvoidとして、非同期な処理が関数内で完結する同期的な関数にしたいです。

Swift Concurrencyの Taskのようなもので囲めば解決するかもしれませんが、Dartだとそれが何に当たるか分からず、発見できていないのが現状です。

戻り値が Future<void> の関数を voidの関数 にする方法があればご教授ください。
また不可能であればそのことを教えていただけると幸いです。

発生している問題

現状[Future<void>が戻り値]
この関数を呼び出す時にawaitを書く必要があります

Future<void> SyncAdd(T event) async {
    add(event);
    await 非同期な処理();
}

理想[voidが戻り値]
呼び出し時にawaitを書く必要をなくしたいです。

void SyncAdd(T event) {
    // (どうにかして以下2行をasyncで囲みたい) {
        add(event);
        await 非同期な処理();
    // }
}

自分で試したこと

awaitを使わずに

非同期な処理().then(exit);

で終了することを試しましたが、うまくいきませんでした。

また、Swift Concurrencyの Taskのようなものを探しましたが見つけることはできませんでした。

0

1Answer

非同期な処理の完了を待つ必要がなければ await をつけずに呼ぶだけでいいです。

void SyncAdd(T event) {
    add(event);
    非同期な処理();
}

dart:cli を使って CLI を書いているのであれば waitFor 関数を使って Future を同期的に待つことはできますが、実験的な機能であり非推奨です。

それ以外の方法はないと思います。

0

Comments

  1. @Ryu-Develop

    Questioner
    ご回答ありがとうございます
    なるほど...完了を待つ必要があり、CLIでもないので方法はなさそうですね...
    Futureのままで呼び出すしかなさそうなので、awaitを書き忘れないように気をつけます!

Your answer might help someone💌