SqlCommand ExecuteReaderAsync helper method
DataContext


  [..]the creation of the DataContext seems a bit excessive


Why do you think so? Is creating the SqlCommand not excessive? You are instantiating it the same number of times.

If DataContext.Translate helps you to save time by not writing the mapping your self then I'd say it's fine. Just remember that DataContext is a disposable type too, so you should add one more using for it.



Naming

Apart from the DataContext you should try to make you code more consistent. This means, don't use abbreviations like conn or trans. Use full words especially for parameters.



Style


public static async Task&lt;IEnumerable&lt;T&gt;&gt; CommandExecuteReaderAsync&lt;T&gt;(
  SqlConnection conn, 
  SqlTransaction trans, 
  CommandType commandType, 
  string commandText, 
  IEnumerable&lt;SqlParameter&gt; parameters, 
  CancellationToken token, 
  int commandTimout)



I hope you have some overloads for this method. 7 (!) parameters, this is a lot. You should try to reduce them and in fact you can hide at least three.

If you make it an extension for the SqlConnection then you'll have one parameter less that you have to specify. 

If you use TransactionScope then you can get rid of the second parameter, the SqlTransaction.

If you write two more helper methods (ExecuteQueryAsync &amp; ExecuteStoredProcedureAsync) that call this method, then you can get rid of the CommandType parameter. 

So no you just have four parameters left that you must specify: commandText, cancelltionToken &amp; commandTimeout &amp; parameters.