어쨌든 나는 그 문제에 부딪 치는 첫 번째 사람이라고 믿을 수 없다. (그리고 나는 해결책을 직접 볼 수 없을만큼 바보 같은 사람이라고 믿고 싶지 않다.)하지만 내 검색 부는 강하지 않았다. 충분히.완료 이벤트를 사용할 때 스파게티 코드를 피하는 방법은 무엇입니까?
시간이 많이 걸리는 단계를 차례로 수행해야 할 때 정기적으로 상황에 처하게됩니다. 워크 플로우는 다음과 같습니다.
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에서 대규모 쉬울 것이다. 그렇습니다. 사람들은 항상이 문제에 뛰어 들고 있습니다. 실제로 언어를 핵심 언어로 만들기에 충분하지 않습니다. –