Tôi đang phát triển ứng dụng C# Winforms, một phần của ứng dụng sẽ tải tệp lên máy chủ web bằng cách sử dụng AsyncUpload (sử dụng nó, do cần sử dụng gọi lại porgress), Trong C# chương trìnhC#: Chặn cuộc gọi chức năng cho đến khi điều kiện đáp ứng
tôi đã nhận một đơn giản cho vòng lặp mà các cuộc gọi chức năng tải lên
for(int i=0;i < 10 ; i++)
{
Uploadfun();
}
Và những niềm vui hiện một số ma thuật:
Uploadfun()
{
// Logic comes here
// webClient.UploadFileAsync runs a 2nd thread to perform upload ..
webClient.UploadFileAsync(uri, "PUT", fileNameOnHD);
}
Và một callback mà được gọi là w hen tải lên Async được thực hiện
Upload_Completed_callback()
{
//Callback event
}
Sửa
Logic trình tự:
- Fun được gọi (từ vòng lặp)
- Logic Fun được thực hiện và thực hiện ..
- Quay lại vòng lặp
- Gọi lại sẽ được gọi là eventuall y, khi UploadFileAsync (đang chạy một số logic trong một chuỗi khác) sẽ kết thúc
Vấn đề nằm ở điểm thứ ba, khi thực hiện di chuyển trở lại vòng lặp, tôi cần chặn vòng lặp tiếp tục cho đến khi gọi lại được gọi.
Bạn có quyền truy cập vào hoạt động 'fun' không? Bạn có lẽ nên xem xét việc cung cấp một giao diện đồng bộ mà trên đó API async được triển khai. –
Cách bạn mô tả nó, mã của bạn có vẻ tuần tự và đơn luồng, có nghĩa là cho đến khi hàm 'callback' được gọi là vòng lặp sẽ không tiếp tục. Vui lòng sửa tôi nếu tôi sai bằng cách đưa ra giải thích chi tiết hơn. –
@Madi: Sau đó, bạn đang làm điều này ngược. Bạn nên sử dụng phiên bản đồng bộ của 'UploadFile' ở cốt lõi của logic và sử dụng một async API trên đầu trang của nó nếu bạn cần nó. –