Có phương pháp đơn giản nào để trì hoãn cuộc gọi chức năng trong khi cho phép chuỗi tiếp tục thực hiện không?Các cuộc gọi chức năng bị trì hoãn
ví dụ:
public void foo()
{
// Do stuff!
// Delayed call to bar() after x number of ms
// Do more Stuff
}
public void bar()
{
// Only execute once foo has finished
}
Tôi biết rằng điều này có thể đạt được bằng cách sử dụng bộ hẹn giờ và xử lý sự kiện, nhưng tôi đã tự hỏi liệu có một cách C# tiêu chuẩn để đạt được điều này không?
Nếu có ai tò mò, lý do là điều này là foo() và bar() là các lớp khác nhau (singleton) mà tôi cần phải gọi cho nhau trong những trường hợp ngoại lệ. Vấn đề là điều này được thực hiện lúc khởi tạo nên foo cần phải gọi thanh cần một thể hiện của lớp foo đang được tạo ... do đó cuộc gọi bị trì hoãn tới bar() để đảm bảo rằng foo hoàn toàn được instanciated .. Đọc lại hầu hết các thiết kế xấu!
EDIT
Tôi sẽ đưa các điểm về thiết kế xấu dưới advisement! Tôi đã nghĩ rằng tôi có thể cải thiện hệ thống, tuy nhiên, tình huống khó chịu này chỉ chỉ xảy ra khi một ngoại lệ được ném, tại tất cả các lần khác hai đơn cùng tồn tại rất độc đáo. Tôi nghĩ rằng tôi sẽ không lộn xộn với những kẻ xấu hổ khó chịu, thay vào đó tôi sẽ tái cấu trúc lại việc khởi tạo một trong các lớp học.
Bạn cần phải sửa chữa nó nhưng không phải bằng cách sử dụng chủ đề (hoặc bất kỳ thực hành asyn khác cho rằng vấn đề) – ShuggyCoUk
Có phải sử dụng đề để đồng bộ hóa đối tượng khởi tạo là dấu hiệu cho thấy bạn nên đi theo một cách khác. Dàn nhạc có vẻ là một lựa chọn tốt hơn. – thinkbeforecoding
Phục sinh! - Nhận xét về thiết kế, bạn có thể lựa chọn để khởi tạo hai giai đoạn. Vẽ từ API Unity3D, có các giai đoạn 'Awake' và' Start'. Trong giai đoạn 'Awake', bạn cấu hình chính mình, và vào cuối giai đoạn này tất cả các đối tượng được khởi tạo. Trong giai đoạn 'Start', các đối tượng có thể bắt đầu giao tiếp với nhau. – cod3monk3y