cuốn sách gpt4 ai đã làm

Khối hành động

In lại Tác giả: Sahara Thời gian cập nhật: 24-12-2024 16:47:42 59 4
mua khóa gpt4 Nike

Mục lục
  • 1. Giới thiệu
  • 2. Giới thiệu về ActionBlock
    • ActionBlock là gì?
    • Tính năng của ActionBlock
    • Các vấn đề sử dụng ActionBlock
    • Cách sử dụng cơ sở của ActionBlock
  • 3. descriptor
  • 4. Giải thích

1. Giới thiệu

Blog trước đã chia sẻ cách sử dụng Kênh để phát triển lý do không đồng bộ luồng với số lượng lớn data. bằng ActionBlock.

2. Giới thiệu về ActionBlock

ActionBlock là gì?

Nó cung cấp một cách đơn giản và mạnh mẽ để xử lý các bài hát tác vụ và có thể dễ dàng phát triển mô hình nhà sản xuất-người tiêu dùng use.

Tính năng của ActionBlock

  • Bài hát xử lý:Khối hành độngCó thể cấu hình để xử lý nhiều tác vụ bài hát, tăng hiệu quả xử lý
  • Lập trình không đồng bộ:Hỗ trợ trình cài đặt mô hình không đồng bộ, có thể tránh chặn các luồng và cải thiện tốc độ và phản hồi năng lượng của ứng dụng
  • Kiểm tra dữ liệu luồng:Bạn có thể kiểm soát cách xử lý dữ liệu luồng bằng cách đặt mức tối đa của bài hát và các tùy chọn khác
  • Nhiệm vụ kế hoạch:Có thể dùng để lên lịch và quản lý các nhiệm vụ song nhằm đảm bảo các nhiệm vụ được thực hiện như mong đợi

Các vấn đề sử dụng ActionBlock

  • model sản phẩm được sử dụng: Có thể được sử dụng để phát triển mẫu nhà sản xuất-người tiêu dùng, trong đó nhà sản xuất gửi dữ liệu tớiKhối hành động, user fromKhối hành độngĐọc dữ liệu và xử lý nó
  • Xử lý dữ liệu luồng: Thích hợp cho các vấn đề cần xử lý số lượng lớn dữ liệu và yêu cầu bài hát được xử lý, ngoại trừ ký tự xử lý, chuyển đổi dữ liệu, vv
  • Nhiệm vụ kế hoạch: Có thể được sử dụng để lên lịch và quản lý các tác vụ song song nhằm đảm bảo rằng các tác vụ được thực thi như được mong đợi

Cách sử dụng cơ sở của ActionBlock

Sử dụng ActionBlock rất đơn giản, các bước chính như sau:

  1. Tạo ActionBlock:
  2. Gửi dữ liệu tới ActionBlock: useSend no clockPhương thức gửi dữ liệu tới ActionBlock
  3. Complete ActionBlock: Được gọi sau khi tất cả dữ liệu được gửiCompletePhương thức này thông báo cho ActionBlock rằng nó sẽ không nhận được dữ liệu mới nữa.
  4. Chờ quá trình xử lý hoàn tất: useCompleteTất cả các tính năng chờ đợi quá trình xử lý hoàn tất dữ liệu

Khối hành động:

use System.Threading.Tasks.Dataflow var actionBlock = new ActionBlock(async item => { // Mô phỏng quá trình xử lý không đồng bộ đang chờ Task.Delay(100); Console.WriteLine($"Processed item: {item}") ; }, ExecutionDataflowBlockOptions mới { MaxDegreeOfParallelism = 4 // Đặt tối đa bài hát ở mức độ }); Gửi dữ liệu tới ActionBlock for (int i = 0; i < 10; i++) { chờ actionBlock.SendAsync(i } // Hoàn thành ActionBlock actionBlock.Complete(); // Chờ quá trình xử lý hoàn tất đang chờ actionBlock.Completion; .WriteLine ("Tất cả các mục đã được xử lý.");

3. descriptor

Giả sử chúng ta có một tập hợp dữ liệu cần được xử lý theo hai bước. Mỗi mục dữ liệu yêu cầu xử lý sơ bộ và sau đó xử lý thêm. Hy vọng rằng bước 2 có thể bắt đầu xử lý ngay khi bước 1 tạo ra dữ liệu kết quả, thay vì đợi bước 1 được xử lý hoàn toàn.

4. Giải thích

Sử dụng TransformBlock và ActionBlock để triển khai mô hình nhà sản xuất-người tiêu dùng. Nhà sản xuất chịu trách nhiệm đọc dữ liệu và gửi đến TransformBlock, còn người tiêu dùng đọc dữ liệu từ TransformBlock và xử lý dữ liệu đó. Sau đây là mã mẫu đơn giản minh họa cách sử dụng TransformBlock và ActionBlock để triển khai mẫu nhà sản xuất-người tiêu dùng để xử lý dữ liệu:

sử dụng System.Threading.Tasks.Dataflow; var cts = new CancellationTokenSource(); // Giả sử có một tập hợp dữ liệu var dataItems = Enumerable.Range(0, 1000).Select(x => $"data_{x}" ).ToList (); var bộ xử lý = new DataProcessor(10, cts.Token); đang chờ bộ xử lý.ProcessAsync(dataItems); Console.ReadKey(); ///  /// Bộ xử lý dữ liệu ///  lớp công khai DataProcessor(int maxDegreeOfParallelism, CancellationToken cancelToken) { public async Task ProcessAsync(List dataItems) { // Tạo TransformBlock để xử lý ở bước 1 và gửi kết quả đến ActionBlock ở bước 2 var step1Block = new TransformBlock(async dataItem => đang chờ Step1(dataItem), new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = maxDegreeOfParallelism, CancellationToken = cancelToken }); // Tạo một ActionBlock để xử lý bước 2 var step2Block = new ActionBlock(async dataItem => { đang chờ Bước 2(dataItem); }, mới ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = maxDegreeOfParallelism, CancellationToken = cancelToken }); // Liên kết TransformBlock với ActionBlock step1Block.LinkTo(step2Block, new DataflowLinkOptions { PropagateCompletion = true }); // Bắt đầu nhiều nhiệm vụ ở bước 1 (nhà sản xuất) foreach (var dataItem in dataItems) { chờ đợi step1Block.SendAsync(dataItem, cancelToken); } // Hoàn thành việc ghi TransformBlock ở bước 1 step1Block.Complete(); // Đợi quá trình xử lý TransformBlock hoàn tất ở bước 1 đang chờ step1Block.Completion; của ActionBlock ở bước 2 step2Block.Complete(); // Đợi quá trình xử lý ActionBlock ở bước 2 hoàn tất đang chờ step2Block.Completion; } riêng tư async Task Step1(string dataItem) { // Mô phỏng quá trình xử lý ở bước 1 (chẳng hạn như xử lý dữ liệu sơ bộ) đang chờ Task.Delay(10, cancelToken Console.WriteLine($"Step1 đã xử lý mục dữ liệu: { dataItem} "); trả về dataItem; } không đồng bộ riêng tư Task Step2(string dataItem) { // Mô phỏng quá trình xử lý bước 2 (chẳng hạn như xử lý thêm dữ liệu) đang chờ Task.Delay(10, cancelToken); Console.WriteLine($"Mục dữ liệu đã xử lý ở bước 2: {dataItem}");

Giải thích mã

  1. Tạo TransformBlock của Bước 1:hiện hữuQuy trình không đồng bộTrong phương pháp này, trước tiên chúng ta tạo một TransformBlock để xử lý ở Bước 1. TransformBlock chấp nhận một mục dữ liệu đầu vào và trả về một mục dữ liệu đầu ra sau khi xử lý.TransformBlockChỉ ra rằng cả đầu vào và đầu ra đềusợi dâykiểu
  2. Tạo ActionBlock của Bước 2: Tạo một ActionBlock để xử lý ở Bước 2. ActionBlock chấp nhận một mục dữ liệu đầu vào và xử lý nó, nhưng không trả về một mục dữ liệu đầu ra.Khối hành độngCho biết đầu vào làsợi dâykiểu
  3. Liên kết TransformBlock và ActionBlock: Liên kết TransformBlock với ActionBlock để kết quả xử lý của Bước 1 được gửi đến Bước 2 để xử lý, sử dụngLiên kết tớiphương thức kết nối hai khối và bộTuyên truyềnHoàn thànhLà đúng, biểu thị rằng khi TransformBlock hoàn thành thì ActionBlock cũng sẽ được hoàn thành
  4. Bắt đầu nhiệm vụ của Bước 1: Gửi từng mục dữ liệu tới TransformBlock và đợi mọi quá trình xử lý dữ liệu hoàn tất, sử dụngSend no clockPhương thức gửi các mục dữ liệu tới TransformBlock
  5. Chờ nhiệm vụ hoàn thành:sử dụngCompletePhương thức này thông báo cho TransformBlock rằng nó sẽ không còn nhận dữ liệu mới và sử dụngCompleteThuộc tính chờ tất cả quá trình xử lý dữ liệu hoàn tất. Sau đó hoàn tất việc viết ActionBlock của Bước 2 và đợi quá trình xử lý ActionBlock của Bước 2 hoàn tất.

Cuối cùng, bài viết này về cách sử dụng ActionBlock để đạt được khả năng xử lý dữ liệu nhiều bước hiệu quả trong .NETCore kết thúc tại đây. Nếu bạn muốn biết thêm về cách sử dụng ActionBlock để đạt được khả năng xử lý dữ liệu nhiều bước hiệu quả trong .NETCore, vui lòng Tìm kiếm các bài viết về CFSDN hoặc tiếp tục duyệt. các bài viết liên quan tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

59 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress