微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用C#执行协同程序?

python中,yield关键字可以在push和pull两个上下文中使用,我知道如何在c#中执行pull context,但是如何实现push.我发布的代码,我试图复制在c#从python:
def coroutine(func):
  def start(*args,**kwargs):
    cr = func(*args,**kwargs)
    cr.next()
    return cr
  return start

@coroutine
def grep(pattern):
  print "Looking for %s" % pattern
  try:
    while True:
      line = (yield)
      if pattern in line:
        print line,except GeneratorExit:
    print "Going away. Goodbye"

解决方法

如果你想要的是一个“可观察的集合” – 也就是说,一个将结果推送给你的集合,而不是让消费者拉他们 – 那么你可能想查看反动框架扩展.这里有一篇文章

http://www.infoq.com/news/2009/07/Reactive-Framework-LINQ-Events

现在,您可以注意到,如果您有协同程序可用,您可以轻松构建“推”和“拉”式迭代器. (或者,正如托马斯指出的那样,您可以使用延续来构建它们.)在当前版本的C#中,我们没有真正的协程(或延续).然而,我们非常关心用户对异步编程的感觉.

实现基于光纤的协同程序作为一流的语言特性是一种可能用于使异步编程更容易的技术,但这只是我们目前研究的许多可能的想法.如果你有一个非常坚实的场景,其中协调工作比其他任何事情都更好 – 包括反应式框架 – 那么我很乐意听到更多的信息.关于人们在异步编程中面临的真正问题,我们有更实际的数据,我们越有可能想出一个很好的解决方案.谢谢!

更新:我们最近宣布,我们正在向下一个版本的C#和VB添加协同程序类异步控制流.您可以使用我们的社区技术预览版,您可以下载here.

原文地址:https://www.jb51.cc/csharp/95050.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐