Giao diện IAsyncCallback
không tồn tại, do đó bạn không thể triển khai giao diện.
Tôi nghi ngờ rằng bạn thực sự muốn biết về số IAsyncResult
interface.
Tôi khuyên bạn nên đọc this page trên MSDN.
Các IAsyncResult
interface đại diện cho một hoạt động (ví dụ như yêu cầu web hoặc một cuộc gọi cơ sở dữ liệu) đang chạy ở chế độ nền, trong khi mã của bạn vẫn tiếp tục thực hiện. Nó có thể cho bạn biết liệu các hoạt động đã hoàn thành (thuộc tính IsCompleted
). Nó cũng cung cấp cho bạn một số WaitHandle
object (thuộc tính AsyncWaitHandle
) có thể được sử dụng để chờ cho đến khi thao tác kết thúc. (Bằng cách gọi result.AsyncWaitHandle.WaitOne()
)
Bạn nhận được một IAsyncResult
bằng cách gọi một phương pháp Begin
Whatever
. (BeginExecuteReader
, BeginGetResponse
và nhiều thứ khác). Phương pháp Begin
Whatever
sẽ lấy bất kỳ thông số nào cần thiết cho hoạt động (Ví dụ: BeginExecuteReader
có thể tham số CommandBehavior
) và có thể lấy đại diện AsyncCallback (không giao diện) và tham số trạng thái. Trả về một đối tượng IAsyncResult
.
Đại biểu AsyncCallback là phương thức bạn cung cấp, phương thức này sẽ được gọi khi hoạt động kết thúc. Nó thường sẽ được gọi trên một chủ đề khác nhau, vì vậy hãy cẩn thận trong nó. Phương thức AsyncCallback của bạn sẽ được cung cấp cùng một IAsyncResult rằng phương thức Begin
Whatever
đã cung cấp cho bạn sớm hơn. Tham số trạng thái được đưa vào IAsyncResult và bị bỏ qua bởi hệ thống; bạn có thể sử dụng nó trong phương thức AsyncCallback để theo dõi hoạt động của nó.(Nhà nước có thể được bất cứ điều gì bạn muốn nó được, bao gồm null
)
Bên AsyncCallback của bạn (hoặc bất cứ nơi nào khác), bạn có thể gọi phương thức End
Whatever
tương ứng với phương pháp Begin
Whatever
bạn gọi trong địa điểm đầu tiên. Bạn phải cung cấp cho IAsyncResult từ Begin
Whatever
hoặc từ AsyncCallback. Khi bạn gọi nó, nó sẽ đợi hoạt động kết thúc (nếu nó chưa được hoàn thành), và sau đó cung cấp cho bạn kết quả của hoạt động. (Giả sử hoạt động trả về một cái gì đó, ví dụ: WebRequest.EndGetResponse
sẽ trả về một số WebResponse
). Nếu xảy ra bất kỳ lỗi nào trong quá trình hoạt động, End
Whatever
sẽ ném một ngoại lệ.
Bạn sẽ triển khai IAsyncResult nếu bạn muốn tạo hoạt động của riêng mình có thể chạy trong nền. Bạn cũng sẽ tạo các phương thức Begin
Whatever
và End
Whatever
phương thức trả lại và lấy tương ứng. Để biết thêm thông tin về việc triển khai IAsyncResult, hãy xem here.
Xin lỗi lỗi typo. Bạn đã nói tôi cần làm rõ trên IAsyncResult.Thank rất nhiều cho lời giải thích của bạn. – user160677
Giải thích tuyệt vời cảm ơn bạn rất nhiều – user160677