不知何故,我不敢相信自己是第一个遇到这个问题的人(而且我不想相信我是唯一一个愚蠢的人,没有直接看到一个解决方案),但是我的搜索能力不够强。
我经常遇到一种情况,我需要一个接一个地执行一些耗时的步骤。工作流程看起来像
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,因此必须有一种更好的方法来构造此代码。但是如何?
最佳答案
正确的方法是以同步方式设计组件并在后台线程中执行完整的链。