code: public final Runnable withSpan(Span span, Runnable runnable) {
      return CurrentSpanUtils.withSpan(span, /* endSpan= */ false, runnable);
    }
docs: Returns a {@link Runnable} that runs the given task with the given {@code Span} in the current
  context.
  
  <p>Users may consider to use {@link SpanBuilder#startSpanAndRun(Runnable)}.
  
  <p>Any error will end up as a {@link Status#UNKNOWN}.
  
  <p>IMPORTANT: Caller must manually propagate the entire {@code io.grpc.Context} when wraps a
  {@code Runnable}, see the examples.
  
  <p>IMPORTANT: Caller must manually end the {@code Span} within the {@code Runnable}, or after
  the {@code Runnable} is executed.
  
  <p>Example with Executor wrapped with {@link io.grpc.Context#currentContextExecutor}:
  
  <pre><code>
  class MyClass {
  private static Tracer tracer = Tracing.getTracer();
  void handleRequest(Executor executor) {
  Span span = tracer.spanBuilder("MyRunnableSpan").startSpan();
  executor.execute(tracer.withSpan(span, new Runnable() {
  {@literal @}Override
  public void run() {
  try {
  sendResult();
  } finally {
  span.end();
  }
  }
  }));
  }
  }
  </code></pre>
  
  <p>Example without Executor wrapped with {@link io.grpc.Context#currentContextExecutor}:
  
  <pre><code>
  class MyClass {
  private static Tracer tracer = Tracing.getTracer();
  void handleRequest(Executor executor) {
  Span span = tracer.spanBuilder("MyRunnableSpan").startSpan();
  executor.execute(Context.wrap(tracer.withSpan(span, new Runnable() {
  {@literal @}Override
  public void run() {
  try {
  sendResult();
  } finally {
  span.end();
  }
  }
  })));
  }
  }
  </code></pre>
  
  @param span the {@code Span} to be set as current.
  @param runnable the {@code Runnable} to withSpan in the {@code Span}.
  @return the {@code Runnable}.
  @since 0.11.0