Dartプログラミング-非同期

アン asynchronous operation とは別のスレッドで実行されます mainアプリケーションスレッド。アプリケーションがメソッドを呼び出して非同期で操作を実行する場合、非同期メソッドがタスクを実行している間、アプリケーションは実行を継続できます。

この概念を理解するために例を見てみましょう。ここで、プログラムはを使用してユーザー入力を受け入れますIO library

import 'dart:io'; 
void main() { 
   print("Enter your name :");            
   
   // prompt for user input 
   String name = stdin.readLineSync();  
   
   // this is a synchronous method that reads user input 
   print("Hello Mr. ${name}"); 
   print("End of main"); 
}

ザ・ readLineSync()同期方式です。これは、次のすべての命令の実行がreadLineSync() 関数呼び出しは、 readLineSync() メソッドは実行を終了します。

ザ・ stdin.readLineSync入力を待ちます。トラックで停止し、ユーザーの入力を受け取るまでそれ以上実行されません。

上記の例では、次のようになります output

Enter your name :     
Tom                   

// reads user input  
Hello Mr. Tom 
End of main

コンピューティングでは、何かが synchronousイベントが発生するのを待ってから続行するとき。このアプローチの欠点は、コードの一部の実行に時間がかかりすぎると、後続のブロックは無関係ですが、実行がブロックされることです。リソースに対する複数の要求に応答する必要があるWebサーバーについて考えてみます。

同期実行モデルは、現在の要求の処理が完了するまで、他のすべてのユーザーの要求をブロックします。このような場合、Webサーバーの場合と同様に、すべての要求は他の要求から独立している必要があります。つまり、Webサーバーは、他のユーザーからの要求に応答する前に、現在の要求の実行が終了するのを待つべきではありません。

簡単に言うと、以前のユーザーのリクエストを完了する前に、新しいユーザーからのリクエストを受け入れる必要があります。これは非同期と呼ばれます。非同期プログラミングとは、基本的に、待機または非ブロッキングプログラミングモデルがないことを意味します。ザ・dart:async パッケージは、Dartスクリプトでの非同期プログラミングブロックの実装を容易にします。

次の例は、非同期ブロックの機能をよりよく示しています。

Step 1 −作成する contact.txt 以下のファイル and 現在のプロジェクトのデータフォルダに保存します。

1, Tom 
2, John 
3, Tim 
4, Jane

Step 2 −アプリケーションの他の部分をブロックせずにファイルを読み取るプログラムを作成します。

import "dart:async"; 
import "dart:io";  

void main(){ 
   File file = new File( Directory.current.path+"\\data\\contact.txt"); 
   Future<String> f = file.readAsString();  
  
   // returns a futrue, this is Async method 
   f.then((data)=>print(data));  
   
   // once file is read , call back method is invoked  
   print("End of main");  
   // this get printed first, showing fileReading is non blocking or async 
}

ザ・ output このプログラムの内容は次のとおりです-

End of main 
1, Tom 
2, John 
3, Tim 
4, Jan

スクリプトがファイルの読み取りを続行している間、「メインの終わり」が最初に実行されます。ザ・Future クラス、一部 dart:asyncは、非同期タスクが完了した後に計算結果を取得するために使用されます。このFuture 計算が終了した後、valueは何かを行うために使用されます。

読み取り操作が完了すると、実行制御は "then()"。これは、読み取り操作に時間がかかる可能性があるため、プログラムの他の部分をブロックしたくないためです。

ダートフューチャー

Dartコミュニティは Future「将来的に価値を得る手段」として。簡単に言えば、Future objectsは、実行が後の時点で完了する式によって返される値を表すメカニズムです。Dartの組み込みクラスのいくつかはFuture 非同期メソッドが呼び出されたとき。

Dartはシングルスレッドのプログラミング言語です。コードが実行スレッドをブロックすると(たとえば、時間のかかる操作を待つか、I / Oをブロックすることによって)、プログラムは事実上フリーズします。

非同期操作により、プログラムはブロックされることなく実行できます。ダートはFuture objects 非同期操作を表します。