Tôi đã gặp phải tình trạng khó xử khá khó xử trong một dự án tại nơi làm việc. Chúng ta cần tạo người dùng trên 4 hoặc 5 dịch vụ khác nhau và đã thiết lập nó theo cách mà nếu không thành công, tất cả đều thất bại. Chúng được đóng gói trong một khối phạm vi giao dịch.Đồng bộ hóa cuộc gọi không đồng bộ trong C#
Một trong những dịch vụ chúng tôi cần thêm người dùng để yêu cầu telnetting in và fudging một số dữ liệu. Có nhiều cách khác để làm điều đó (mà chi phí tiền bạc) nhưng bây giờ đó là những gì chúng tôi đang mắc kẹt với. Việc thêm một người dùng mất khoảng 3 phút. Chúng tôi sẽ làm việc để làm cho nó xuống đáng kể như có thể tưởng tượng nhưng đó không thực sự là điểm. Cuộc gọi này không đồng bộ và loại phải hoạt động chính xác. Cú đấm là, chỉ có thể có tối đa 10 kết nối với dịch vụ.
Dự án của chúng tôi đang được thiết lập để tạo người dùng theo lô. Vì vậy, có khả năng 50 người dùng được tạo ra tại một thời điểm. Điều này cho thấy một vấn đề khi chỉ có 10 kết nối có thể được thực hiện thông qua telnet, và một người dùng đã qua xử lý không thể mất nhiều thời gian hơn dịch vụ telnet. Bây giờ tôi cần phải đồng bộ hóa quá trình này để phần còn lại không thể tiếp tục cho đến khi nó kết thúc.
Chúng tôi đang sử dụng cuộc gọi lại và đại biểu có cuộc gọi không đồng bộ để triển khai chức năng. Điều gì sẽ là cách tốt nhất để đóng gói phần không đồng bộ, và không tiếp tục cho đến khi nó được hoàn thành?
Chúng tôi có nên thiết lập vòng lặp chỉ chấm dứt khi cuộc gọi kết thúc? Có một cái gì đó trong thư viện Threading có thể giúp đỡ? Tôi đã không bao giờ làm việc với các chủ đề trước đây vì vậy đây sẽ là một đầu tiên cho tôi. Có những công cụ nào để giúp giải quyết vấn đề này?
EDIT:
Nếu tôi sử dụng BeginInvoke/EndInvoke mẫu, sẽ asynch cuộc gọi trong phạm vi các đại biểu đầu tiên tôn vinh bắt đầu/kết thúc cũng?
Ví dụ:
public void dele1(string message) {
Console.Write(message);
delegate2 del2 = new delegate2;
del2();
Console.Write("End of Delegate 2");
}
public void dele2() {
// Long Processing
Console.Write("Delegate 2");
}
public delegate void delegate1(String message);
public delegate void delegate2();
delegate1 del1 = new delegate1(dele1);
del1("Delegate 1").BeginInvoke;
del1().EndInvoke;
Console.Write("End of Delegate 1");
// Dự kiến Output (End Invoke chờ đợi cho đến khi Đại biểu 2 được hoàn thành):
Delegate 1
End of Delegate 2
Delegate 2
End of Delegate 1
// Hoặc (End Invoke chỉ chờ đại biểu 1 để kết thúc nhưng không bất kỳ cuộc gọi đại biểu nội bộ nào):
Delegate 1
End of Delegate 2
End of Delegate 1
Delegate 2
Sẽ kết thúc yêu cầu chờ cho đến khi đại biểu thứ hai xử lý xong als o? Hoặc tôi sẽ cần phải sử dụng các mẫu gọi trên tất cả các cuộc gọi đại biểu?
Không chắc chắn về cú pháp của bạn cho ví dụ đã chỉnh sửa của bạn. Bạn có thể làm rõ thêm những gì đang xảy ra với del1? – strager