C# 如何使用Caliburn Micro中IResult的句柄实现中的协程

C# 如何使用Caliburn Micro中IResult的句柄实现中的协程,c#,wpf,caliburn.micro,C#,Wpf,Caliburn.micro,我喜欢Caliburn.Micro中的Coroutine/IResult实现,它允许我使用MVVM逻辑控制视图上执行的几个操作 但是,在处理来自eventaggregator的消息时,我需要使用相同的方法。My viewmodel实现IResult,其结果是以下方法: public void Handle(T message) { ... } 我尝试过更改方法以返回IResult或IEnumerable,但这当然不会编译,因为我当时没有遵循接口 现在我正在使用一种方法,创建我需要的IResul

我喜欢Caliburn.Micro中的Coroutine/IResult实现,它允许我使用MVVM逻辑控制视图上执行的几个操作

但是,在处理来自eventaggregator的消息时,我需要使用相同的方法。My viewmodel实现IResult,其结果是以下方法:

public void Handle(T message) { ... }
我尝试过更改方法以返回IResult或IEnumerable,但这当然不会编译,因为我当时没有遵循接口

现在我正在使用一种方法,创建我需要的IResults列表,然后调用

Caliburn.Micro.Coroutine.BeginExecute(例程.GetEnumerator())

但我不喜欢这种解决方案,我也不确定执行是在什么线程上运行的。此外,我在日常生活中没有任何上下文,但我理解上下文可能很困难,因为消息可能来自任何地方。但是,如果viewmodel是ViewAware,则可以获取上下文或

其他人在句柄实现的上下文中做了什么?有经验吗


希望有一些很酷的解决方案

一个选择是基于Caliburn.Micro创建您自己的EA,它了解协同程序。我们已经考虑过在开箱即用的情况下添加它,但我还没有着手进行。

我也没办法,但我有兴趣了解一下(ab)使用C#迭代器方法的另一个例子。你有一个链接可以分享吗?来自医生:这不是对interators的滥用。这是一种众所周知的启用协同例程的技术,不仅在C#中如此,在其他平台上也是如此。vNext中的Async/Await基本上是相同策略的定制版本。当JavaScriptHarmony发布时,您将看到与Promission和Generator一起使用的相同技术。它已经用于其他.NET项目,如Java和Ruby。我肯定还有其他地方。这是个好主意;我们也做过类似的事情。这也可能是一个很好的机会,让EA更具可扩展性(将一些内部构件公开为受保护的虚拟文件),因为要获得任何不同的行为,否则需要复制粘贴继承。开箱即用的EA处理订阅者(使用处理程序)的方式是一种非常有用的抽象,可重用。