Her nasılsa, bu soruna koşan ilk kişi olduğuma inanamıyorum (ve doğrudan bir çözümü görmemek için tek aptal olduğuma inanmak istemiyorum), ama arama-fu'm güçlü değildi yeterli.Tamamlama olaylarını kullanırken spagetti kodundan nasıl korunulur?
Düzenli olarak bir durumla karşılaşıyorum, birbiri ardına birkaç zaman harcayan adımlar atmam gerektiğinde. iş akışı Her adım sırasında UI engellemek istemiyoruz
var data = DataGetter.GetData();
var processedData = DataProcessor.Process(data);
var userDecision = DialogService.AskUserAbout(processedData);
// ...
gibi yani her yöntem derhal geri gelmez, görünüyor ve Bittikten sonra bir olay yükseltir. Şimdi neşe
DataGetter.Finished += (data) =>
{
DataProcessor.Finished += (processedData) =>
{
DialogService.Finished(userDecision) =>
{
// ....
}
DialogService.AskUserAbout(processedData);
}
DataProcessor.Process(data);
};
DataGetter.GetData();
Bu çok fazla benim zevkime Continuation-passing style gibi okur ve bu kodu yapısı için daha iyi bir yolu olmalı içine yukarıdaki kod bloğu mutasyon beri, ortaya çıkar. Ama nasıl?
bana Devam Görevleri düşündürüyor: http://www.blackwasp.co.uk/ContinuationTasks.aspx –
Bu 'await' ile C# 5'de kitlesel kolay olacaktır. Evet, insanlar her zaman bu işe koşarlar ve bu, aslında onu çekirdek dil haline getirmek için yeterince iyi değildir. –