Dart Programlama - Async

Bir asynchronous operation iş parçacığından ayrı olarak mainuygulama dizisi. Bir uygulama bir işlemi eşzamansız olarak gerçekleştirmek için bir yöntemi çağırdığında, zaman uyumsuz yöntem görevini gerçekleştirirken uygulama yürütülmeye devam edebilir.

Misal

Bu kavramı anlamak için bir örnek alalım. Burada, program kullanıcı girişini kullanarakIO 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()senkronize bir yöntemdir. Bu, aşağıdaki tüm talimatların yürütülmesi anlamına gelir.readLineSync() işlev çağrısı şu tarihe kadar engellenecek: readLineSync() yöntem yürütmeyi bitirir.

stdin.readLineSyncgirdi için bekler. İzlerinde durur ve kullanıcının girdisini alana kadar daha fazla yürütmez.

Yukarıdaki örnek şunla sonuçlanacaktır: output -

Enter your name :     
Tom                   

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

Hesaplamada, bir şeyin synchronousDevam etmeden önce bir olayın olmasını beklediğinde. Bu yaklaşımın bir dezavantajı, kodun bir kısmının yürütülmesi çok uzun sürerse, birbiriyle ilgisiz olsa da sonraki blokların çalıştırılmasının engellenmesidir. Bir kaynak için birden çok isteğe yanıt vermesi gereken bir web sunucusu düşünün.

Eşzamanlı bir yürütme modeli, mevcut isteği işlemeyi bitirene kadar diğer her kullanıcının isteğini engelleyecektir. Böyle bir durumda, bir web sunucusunda olduğu gibi, her istek diğerlerinden bağımsız olmalıdır. Bu, web sunucusunun diğer kullanıcıların isteğine yanıt vermeden önce mevcut isteğin yürütülmesini beklememesi gerektiği anlamına gelir.

Basitçe söylemek gerekirse, önceki kullanıcıların isteklerini tamamlamadan önce yeni kullanıcılardan gelen istekleri kabul etmelidir. Bu, eşzamansız olarak adlandırılır. Eşzamansız programlama temelde bekleme veya engellemeyen programlama modeli olmadığı anlamına gelir. dart:async paketi, bir Dart komut dosyasında zaman uyumsuz programlama bloklarının uygulanmasını kolaylaştırır.

Misal

Aşağıdaki örnek, eşzamansız bir bloğun işleyişini daha iyi göstermektedir.

Step 1 - Bir contact.txt dosya aşağıda verildiği gibi and mevcut projedeki veri klasörüne kaydedin.

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

Step 2 - Uygulamanın diğer bölümlerini engellemeden dosyayı okuyacak bir program yazın.

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 Bu programın aşağıdaki gibi olacak -

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

Komut, dosyayı okumaya devam ederken "ana son" ilk olarak yürütülür. Future sınıf, parçası dart:async, zaman uyumsuz bir görev tamamlandıktan sonra bir hesaplamanın sonucunu almak için kullanılır. BuFuture değer daha sonra hesaplama bittikten sonra bir şeyler yapmak için kullanılır.

Okuma işlemi tamamlandığında, yürütme kontrolü içinde aktarılır. "then()". Bunun nedeni, okuma işleminin daha fazla zaman alabilmesi ve bu nedenle programın diğer bölümlerini engellemek istememesidir.

Dart Geleceği

Dart topluluğu bir Future"gelecekte bir değer elde etmenin bir yolu" olarak. Basit ifadeyle,Future objectsyürütülmesi daha sonraki bir zamanda tamamlanacak olan bir ifade tarafından döndürülen değerleri temsil eden bir mekanizmadır. Dart'ın yerleşik sınıflarından bazıları birFuture zaman uyumsuz bir yöntem çağrıldığında.

Dart, tek iş parçacıklı bir programlama dilidir. Herhangi bir kod yürütme iş parçacığını engellerse (örneğin, zaman alan bir işlemi bekleyerek veya G / Ç'yi engelleyerek), program etkin bir şekilde donar.

Eşzamansız işlemler, programınızın engellenmeden çalışmasına izin verir. Dart kullanırFuture objects zaman uyumsuz işlemleri temsil etmek için.