title: How can you do Co-routines using C#?
body: <p>In python the yield keyword can be used in both push and pull contexts, I know how to do the pull context in c# but how would I achieve the push. I post the code I am trying to replicate in c# from python:</p>
  
  <pre><code>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"
  </code></pre>