İşte Akka.NET içinde PipeTo()
kullanmanın the official sample var:Neden Göndericinin kapatılmasını PipeTo() ile kullanmalıyım?
Receive<BeginProcessFeed>(feed =>
{
//instance variable for closure
var senderClosure = Sender;
SendMessage(string.Format("Downloading {0} for RSS/ATOM processing...", feed.FeedUri));
//reply back to the sender
_feedFactory.CreateFeedAsync(feed.FeedUri).PipeTo(senderClosure);
});
biz burada Sender
kapatılması kullanmalısınız neden soru nedir? Bu örnekte
_feedFactory.CreateFeedAsync(feed.FeedUri).PipeTo(Sender);
ve söylenir docs burada kapatma kullanmak zorunludur: Neden sadece kullanmak değil. Ama bunun için hiçbir neden göremiyorum.
ContinueWith()
kullansaydık, kapamanın kullanılmasının makul olduğu ancak PipeTo()
parametresi olarak kullanılması makul olur.
Bir şey özlüyor muyum?
Tanımladığınız sorun, derleyici bir kapatma bağlamında "bunu" yakaladığında görünür. Örneğin, lambda ifadelerinde "bu" üyeleri (Gönderen gibi) kullandığımızda olur. Fakat burada sadece PipeTo() yöntemine parametreyi aktarıyoruz ve hiçbir kapanma oluşmuyor. – alexey
Gönderen, içeriğe duyarlı bir yöntemdir - bir oyuncu tarafından bir iletinin her alınışında değerin değişmesidir. Gönderenin geçerli değeri yerel bir değişkende önbelleğe alınmazsa, PipeTo kullandığınızda kapanırsa, gönderen çağrısının beklediğiniz oyuncudan farklı bir değer döndürmesi olasılığı vardır. Bu hatayı birçok kez kopyalayabildik: p – Aaronontheweb
@Aaronontheweb: "Gönderenin geçerli değeri, PipeTo kullanıldığında kapalı olan yerel bir değişkende önbelleğe alınmadıysa". Bu bana mantıklı gelmiyor: PipeTo'nun yaptığı, "Gönderen" özelliğinde değil, geçerli "Gönderenin" referansının bir kopyası olan yerel bir değişkende (alıcı "argümanı") kapanıyor. Bu nedenle, "Gönderen" özelliğini yerel bir değişkene açıkça kopyalamaktan farklı olarak görmüyorum. –