协程的'最后'行动

时间:2013-01-20 18:05:44

标签: caliburn.micro coroutine cancellation

想象一下,我有一个使用CM文档中包含的Loader实现的协程,我用它来显示我页面上的繁忙指示符

现在假设用户试图将已经存在的对象添加到数据存储中 - 自然地在协程期间“保存”操作将失败,这意味着协同程序将取消执行

如果发生这种情况,枚举器永远不会到达我的Loader.Hide()调用来隐藏忙指示符 - 我想知道是否已经有一种机制允许某些IResult实现执行,即使协程失败了?

示例:

    public IEnumerator<IResult> SaveData()
    {
        yield return Framework.Coroutines.Loader.Show("Saving Data");
        yield return new Framework.Coroutines.SaveOperation(SomeObject);
        yield return Framework.Coroutines.Loader.Hide();
    }

如果协程在第二步合法失败,繁忙指示仍然在屏幕上,让用户无法纠正错误并尝试重新保存(并停止与底层UI的任何交互!)

我可以扩展coroutine的实现并让迭代器有一个标志,说明是否允许它们在出现错误时执行 - 只是想知道是否有人已经这样做了或者它是否是框架的一部分我'我不见了?

1 个答案:

答案 0 :(得分:1)

您也可以使用Caliburn.Micro Action Filters。见SetBusyAttribute。 声明式属性是透明的,使代码更易于管理。