Lập trình Dart - Không đồng bộ

An asynchronous operation thực thi trong một chuỗi, tách biệt với mainchủ đề ứng dụng. Khi một ứng dụng gọi một phương thức để thực hiện một hoạt động không đồng bộ, ứng dụng có thể tiếp tục thực thi trong khi phương thức không đồng bộ thực hiện nhiệm vụ của nó.

Thí dụ

Hãy lấy một ví dụ để hiểu khái niệm này. Ở đây, chương trình chấp nhận đầu vào của người dùng bằng cách sử dụngIO 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"); 
}

Các readLineSync()là một phương pháp đồng bộ. Điều này có nghĩa là việc thực hiện tất cả các hướng dẫn tuân theoreadLineSync() cuộc gọi chức năng sẽ bị chặn cho đến khi readLineSync() phương thức kết thúc thực thi.

Các stdin.readLineSyncchờ đầu vào. Nó dừng theo dõi và không thực thi thêm nữa cho đến khi nhận được đầu vào của người dùng.

Ví dụ trên sẽ dẫn đến kết quả sau output -

Enter your name :     
Tom                   

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

Trong máy tính, chúng tôi nói một cái gì đó là synchronouskhi nó đợi một sự kiện xảy ra trước khi tiếp tục. Một bất lợi trong cách tiếp cận này là nếu một phần của mã mất quá nhiều thời gian để thực thi, các khối tiếp theo, mặc dù không liên quan, sẽ bị chặn thực thi. Hãy xem xét một máy chủ web phải đáp ứng nhiều yêu cầu cho một tài nguyên.

Một mô hình thực thi đồng bộ sẽ chặn mọi yêu cầu của người dùng khác cho đến khi nó xử lý xong yêu cầu hiện tại. Trong trường hợp như vậy, giống như của một máy chủ web, mọi yêu cầu phải độc lập với những yêu cầu khác. Điều này có nghĩa là, máy chủ web không nên đợi yêu cầu hiện tại hoàn thành việc thực thi trước khi nó phản hồi yêu cầu từ người dùng khác.

Nói một cách đơn giản, nó nên chấp nhận yêu cầu từ người dùng mới trước khi nhất thiết phải hoàn thành yêu cầu của người dùng trước. Điều này được gọi là không đồng bộ. Lập trình không đồng bộ về cơ bản có nghĩa là không có mô hình lập trình chờ hoặc không chặn. Cácdart:async gói này tạo điều kiện thuận lợi cho việc triển khai các khối lập trình không đồng bộ trong tập lệnh Dart.

Thí dụ

Ví dụ sau minh họa rõ hơn hoạt động của một khối không đồng bộ.

Step 1 - Tạo một contact.txt tập tin như dưới đây and lưu nó vào thư mục dữ liệu trong dự án hiện tại.

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

Step 2 - Viết một chương trình sẽ đọc tệp mà không chặn các phần khác của ứng dụng.

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 
}

Các output của chương trình này sẽ như sau:

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

"Kết thúc của main" thực thi đầu tiên trong khi tập lệnh tiếp tục đọc tệp. CácFuture lớp học, một phần của dart:async, được sử dụng để lấy kết quả của một phép tính sau khi một tác vụ không đồng bộ đã hoàn thành. Điều nàyFuture giá trị sau đó được sử dụng để làm một cái gì đó sau khi tính toán kết thúc.

Sau khi hoàn thành thao tác đọc, điều khiển thực thi được chuyển trong "then()". Điều này là do thao tác đọc có thể mất nhiều thời gian hơn và vì vậy nó không muốn chặn phần khác của chương trình.

Tương lai phi tiêu

Cộng đồng Dart xác định một Futurelà "một phương tiện để nhận một giá trị vào một lúc nào đó trong tương lai." Chỉ cần đặt,Future objectslà một cơ chế để đại diện cho các giá trị được trả về bởi một biểu thức mà việc thực thi sẽ hoàn tất vào một thời điểm sau đó. Một số lớp tích hợp của Dart trả vềFuture khi một phương thức không đồng bộ được gọi.

Dart là một ngôn ngữ lập trình đơn luồng. Nếu bất kỳ mã nào chặn luồng thực thi (ví dụ: bằng cách chờ thao tác tốn thời gian hoặc chặn trên I / O), chương trình sẽ bị đóng băng một cách hiệu quả.

Các hoạt động không đồng bộ cho phép chương trình của bạn chạy mà không bị chặn. Sử dụng phi tiêuFuture objects để biểu diễn các hoạt động không đồng bộ.