Bazı eylemleri uyumsuz olarak gerçekleştiren ve bittiğinde bir olayı başlatan bir yönteme sahip olduğumuz bu ortak senaryoya sahibiz.Eşzamansız bir yöntemi senkronize etmenin genel bir yolu var mı?
ManualResetEvent reset = new ManualResetEvent(false);
someobject.AsyncActionDone += (sender, args) => reset.Set();
someobject.PerformAsyncAction();
reset.WaitOne();
Bunu yapmak için bir yardımcı yöntem yazmanın bir yolu var mı:
biz eşzamanlı yerine biz şuna benzer kodu var yapmadıysanız istediğiniz zamanlar vardır? İşlemi gerçekleştirmek için iletebilirim, ancak bir EventHandler parametresini parametre olarak geçirebildiğiniz gibi görünmediğinden yardımcı yöntemin hangi olayı dinleyeceğini bilmesini sağlayan bir şeyden nasıl geçeceğimi bilmiyorum.
Tercihen yansıma gerektirmeyen bir çözüm bazı karışıklıklara gibi görünüyor, bu nedir SomeObject sınıfının bir örneğidir gibidir: ben senin kayması yakalamak ise
public class SomeClass
{
private ExternalServer someServerOverTheNetwork = new ExternalServer();
public event EventHandler AsyncActionDone;
public Data SomeData { get; set; }
public void PerformAsyncAction()
{
someServerOverTheNetwork.GetSomeData(OnDataRetrived);
}
public Data OnDataRetrived(Data someData)
{
AsyncActionDone(this, new DataEventArgs(someData));
}
}
Biri nesnesinin uygulayıcısı mısınız, yoksa değiştirilemeyen bir kitaplık türü mü? –
Ancak, böyle birçok nesne var. Eylemlerin çoğu, bir sunucuya istek göndermeyi ve sonucun geri gelmesini beklemeyi içerir, dolayısıyla varsayılan olarak neden uyumsuzlar. – Davy8
En yaygın eylemlerimizden biri için bunu sunucudan nesnelerin bir listesini önbelleğe almanın bir yöntemine sahibiz, ancak tam olarak nesne tipini ve dinlenecek olayı bilmemize bağlıdır. Hangi olayı dinleyebilmek isterim ki çift kodları azaltabiliriz, çünkü farklı olan tek şey metot ve tamamlandıktan sonra ortaya çıkan olaydır. – Davy8