2020/6/7 dart:async – asynchronous programming

dart:async – asynchronous programming

非同期処理のプログラミングではよくコールバック関数を使って実装しますが、Dart言語では代わりに、FutureクラスとStreamクラスのオブジェクトを使用します。Futureクラスは未来のある時点で結果が提供される「約束」のようなものです。Streamクラスは複数のイベントのような、複数の値を得る方法です。


dart:asyncライブラリはwebアプリとコマンドラインアプリの両方で機能します。ライブラリを使用するときは、dart:asyncライブラリをインポートします。

import 'dart:async';

Version note

Dart2.1からFutureクラスとStreamクラスを使用する際dart:asyncライブラリをインポートする必要はなくなりました。



Future

Futureオブジェクトは、主に非同期なメソッドの返り値として、Dartライブラリの中によく登場します。future(Futureクラスのインスタンス)がcomplete(完了)すると、結果の値を使用することができます。

awaitを使おう(Using await)

Future APIを直接使おうとする前に、awaitを代わりに使用することを考えてください。その方が理解しやすいコードを書くことができます。

下記の関数を考えてみます。runUsingFuture関数は、三つの非同期関数を実行するためにFutureクラスのthen()メソッドを使っています。次の非同期関数を実行する前に、その前の非同期関数の結果を待ちます。

sample1-1

runUsingFuture() {
  // ...
  findEntryPoint().then((entryPoint) {
    return runExecutable(entryPoint, args);
  }).then((exitCode){flushThenExit(exitCode)});
}

 

具体的に、findEntryPoint()関数がcomplete(完了)した時に、その結果を引数entryPointで受け取って、

(entryPoint) {
    return runExecutable(entryPoint, args);
  }

を実行する。runExcutable関数は非同期関数。thenメソッドはFutureインスタンスを返す。その返ってきたfutureがcompleteした時、その結果を引数としてflushThenExit関数に渡して実行される。


sample1-1をawaitを使って書くとsample1-2のようになります。…

2020/3/24 : Dart : Asynchronous programming: futures, async, awaitの訳

Asynchronous programming: futures, async, await

何故非同期なコードが重要なのか?(Why asynchronous code matters)

非同期な処理は、他の処理が終わるのを待つ間、あなたのプログラムを完璧に機能させます。以下に一般的な非同期処理を示します。

  • ネットワークからデータを取ってくる。
  • データベースに書き込む。
  • ファイルからデータを読み込む。

Dartで非同期処理を行うために、Futureクラスとasync、awaitキーワードを使用します。

例:非同期関数の正しく無い使用例

下記のサンプルは非同期関数(fetchUserOrder())の間違った使い方の例です。あとであなたはasync、awaitキーワードを使用してこのサンプルを修正します。このサンプルを実行する前に、どこが間違いなのか考えてみましょう。結果はどうなるでしょうか?

sample1-1

// このサンプルはDartの非同期処理の間違ったコードです。

String createOrderMessage () {
  var order = fetchUserOrder();
  return 'Your order is: $order';
}

Future<String> fetchUserOrder() {
  // Imagine that this 

2020/2/27 Dart Asynchronous programming: futures, async, await

このcodelabでは、非同期処理をfuturesとasync、awaitキーワードを用いて記述する方法を扱います。

このcodelabでは以下の要素を扱います。

  • いつ、どのようにasync、awaitキーワードを使うか
  • 実行の順番がasync、awaitキーワードを使うことでどのようになるか
  • async関数の中で、非同期関数が発するエラーをtry-catch文を使い扱う方法

なぜ非同期処理が重要なのか?(Why asynchronous code matters)

非同期処理を使うことで、別の処理の終了を待っているときのプログラムが完璧にできます。非同期処理を使う場面として

  • ネットワークからデータを取得する
  • データベースに書き込む
  • ファイルからデータを読み込む

Dartで非同期処理を実行するために、Futureクラスとasync、awaitキーワードを使うことができます。

Example:非同期関数の間違った使い方の例

以下(sample1-1)に非同期関数( fetchUserOrder() )の間違った使い方を示します。その後でasync,awaitを使ってこのサンプルを修正します。このサンプルを実行する前に、結果がどうなるか考えてみてください。

sample1-1

String createOrderMessage () {
  var order = fetchUserOrder();
  return 'Your order is: $order';
}

Future<String> fetchUserOrder() {
  // Imagine that this