title: Should I return a ValueTask or Task in a method which calls an async method
body: <p>I have a method with the following signature:</p>
  <pre><code>public async Task&lt;Result&gt; CreateAsync(T entity)
  {
      try
      {
          await _c.CreateItemAsync(entity);
  
          return Result.Ok();
      }
      catch (Exception e)
      {
          return Handle(e); // returns a `Result`
      }
  }
  </code></pre>
  <p>_c is a <code>Container</code> for CosmosDB.</p>
  <p>Now, I have another method like this:</p>
  <pre><code>public Task&lt;Result&gt; CreateUserAsync(User user)
  {
      var userEntity = new UserEntity { Id = user.Id, Name = user.Name };
      return CreateAsync(userEntity);
  }
  </code></pre>
  <p><code>Result.Ok()</code> is a very simple static method of a custom class <code>Result</code>:</p>
  <pre><code>class Result
  {
      public static Result Ok() { return new Result(); }.
  }
  </code></pre>
  <p>So, I have two methods, one being <code>Task&lt;Result&gt; CreateUserAsync(User user)</code>, which returns a simple <code>Task</code>, without awaiting anything inside it, but the other task that I call at the end <code>return CreateAsync(userEntity);</code> awaits stuff inside it.</p>
  <p>So to my understanding, <code>CreateAsync()</code> should remain as a <code>Task</code> return type, because it performs async stuff inside it, but does the method I call it from (that is <code>CreateUserAsync()</code>) needs to remain <code>Task</code> as well, or can it become a <code>ValueTask</code>?</p>