どういうわけか、私はその問題に遭遇する最初の人だとは信じられません(そして、私はソリューションを直接見ることができないほど愚かな人だとは信じたくありません)。しかし、私の検索フーは強くありませんでした十分な。完了イベントを使用しているときスパゲッティコードを避けるには?
私は定期的に状況に遭遇します。私は、時間を掛けていくステップを順番に実行する必要があります。ワークフローは次のようになります
var data = DataGetter.GetData();
var processedData = DataProcessor.Process(data);
var userDecision = DialogService.AskUserAbout(processedData);
// ...
各ステップでUIをブロックしたくないため、すべてのメソッドがすぐに戻り、終了したらイベントを発生させます。今はしゃぎが
DataGetter.Finished += (data) =>
{
DataProcessor.Finished += (processedData) =>
{
DialogService.Finished(userDecision) =>
{
// ....
}
DialogService.AskUserAbout(processedData);
}
DataProcessor.Process(data);
};
DataGetter.GetData();
に上記のコードブロックが突然変異するので、すさまじいこれが私の好みのためContinuation-passing styleのようなあまりを読み込み、このコードを構造化するためのより良い方法がなければなりません。しかしどうですか?
私は継続タスクの考えさせる:http://www.blackwasp.co.uk/ContinuationTasks.aspx –
これは、 'await'とC#5で大量に容易になります。そう、ええ、人々はこれを常に踏襲しています。実際には、それを実際にコア言語にするには十分です。 –