不知何故,我不敢相信自己是第一个遇到这个问题的人(而且我不想相信我是唯一一个愚蠢的人,没有直接看到一个解决方案),但是我的搜索能力不够强。

我经常遇到一种情况,我需要一个接一个地执行一些耗时的步骤。工作流程看起来像

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,因此必须有一种更好的方法来构造此代码。但是如何?

最佳答案

正确的方法是以同步方式设计组件并在后台线程中执行完整的链。

09-27 04:06