title: tensorflow tf.Operation run method usage
body: <p>I am exploring tensorflow. 
  I have the following problem that I will illustrate in a small code fragment.
  I am not searching for the best way, I am just exploring all options</p>
  
  <pre><code>import tensorflow as tf
  
  g = tf.Graph()
  
  with g.as_default():
      a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
      b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
      c = tf.matmul(a, b, name='c')
  
  c_operation = g.get_operations()[2]  # getting an tf.Operation object
  # c_operation = g.get_operation_by_name('c') is another way to get
  
  # testing input control dependencies , works fine
  c_operation.control_inputs.append(g.get_operation_by_name('a'))
  c_operation.control_inputs.append(g.get_operation_by_name('b'))
  
  print(c_operation.control_inputs)  
  # now I am controlling the order of execution
  
  # creating a session that uses graph g
  sess = tf.Session(graph=g)
  # v = sess.run(c)  # this works
  v = c_operation.run(session=sess) # but this returns None
  </code></pre>
  
  <p>So my question here is, what is the purpose of tf.Operation.run and how I should be using it. What is wrong with my code? Shouldn't c_operation.run return the value of the resulting operation.</p>
  
  <p>Does the associated tensor (c here) holds the values? I did not find a way to extract them (aside from using sess.run(c)</p>