Tôi có đối tượng này PreloadClient
mà thực hiện IDisposable
, tôi muốn vứt bỏ nó, nhưng sau khi các phương pháp không đồng bộ kết thúc cuộc gọi của họ ... mà không xảy raLàm thế nào để vứt bỏ các đối tượng có các phương thức không đồng bộ được gọi là?
private void Preload(SlideHandler slide)
{
using(PreloadClient client = new PreloadClient())
{
client.PreloadCompleted += client_PreloadCompleted;
client.Preload(slide);
}
// Here client is disposed immediately
}
private void client_PreloadCompleted(object sender, SlidePreloadCompletedEventArgs e)
{
// this is method is called after a while,
// but errors are thrown when trying to access object state (fields, properties)
}
Vì vậy, bất kỳ ý tưởng hoặc quanh công việc ??
Tôi tin rằng đây là một câu trả lời tuyệt vời –
Một mẫu có thể áp dụng ở đây và tôi muốn sử dụng thường xuyên hơn, sẽ có khách hàng bao gồm thuộc tính 'IsDisposed', có' _activeClients' giữ một danh sách 'WeakReference' cho khách hàng, và có hành động thêm một mục vào' _activeClients' kiểm tra một vài mục để xem liệu 'WeakReference' đã chết hay mục tiêu được xử lý," hoán đổi "nó với mục tiếp theo nếu vậy. Điều đó sẽ tránh bất kỳ cần phải khóa danh sách trong gọi lại không đồng bộ, và cũng thay thế O (N) chi phí của việc loại bỏ từng mục từ danh sách với một O (1) thêm chi phí khi mục được thêm vào. – supercat
Bạn có thể giải thích tại sao việc vứt bỏ tốt hơn là sử dụng ở đây - thx hay không. – niico