👨🔧
【Flutter / Dart】async awaitについて<非同期処理>
概要
今日はDartの非同期処理について勉強しました。
async awaitについて学びました✏️
リンク集
内容
同期処理、非同期処理とは
- 同期処理
自身の処理が完了するまで、次の処理を実行しない - 非同期処理
自身の処理が完了する前に、他の処理を実行できる
やってみた。
const delays = [1, 2, 3];
void main() {
printLinesWithDelay();
}
Future<void> printLinesWithDelay() async {
for (final string in generateFutureStrings()) {
print(await string);
}
}
List<Future<String>> generateFutureStrings() {
return delays.map((delay) {
return Future.delayed(
Duration(seconds: delay),
() =>
'Printed with $delay second${delay > 1 ? 's' : ''} delay ${delay == delays.last ? '\nTa-da! All lines are printed!' : ''}',
);
}).toList();
}
【解説】
これは、1秒に一回メッセージをコマンドラインメッセージとして表示するプログラムです。
【ポイント】
-
Future.delayed(a, b)
の場合a => (Durationという指定期間待ったあと処理を実行する)
とb => (実行する処理)
- 【公式】時間の処理
// 1秒後にしょりを実行。
Future.delayed(const Duration(millisecond: 1000), () {
print('Hello World');
});
// 1.5秒まつ
Future.delayed(const Duration(millisecond: 1500),);
print('Hello World');
上記は結果的には同じ結果になるか、使い方を知っているといろんな場面で使うことができる。
その他
async awaitを学んでいったなかで、
「Isolateは知っているかい?」
そう言われた、調べてみると非同期でよく使うcomputeの処理の中に内包している処理みたいだ。
はっきりとはわかっていないが、
HTTP通信などの結果を得る場合に使っているthen
の処理ことらしい。
Isolatesの処理自体も存在しているが、使い道はよくわからない。Isolates内のみで処理を行い、結果をメッセージのみで受け取れることみたいだ。
時間がある時にもう少し深ぼりしてみようと思う。
Discussion
millisecond
ではなく、s
のあるmilliseconds
じゃないでしょうか?それともDartが変わりましたか?