You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// note: in many cases of adding a new async method I might add a CancellationToken - however, cancellation is expressed via WithCancellation on iterators
/// Execute a query asynchronously using <see cref="IAsyncEnumerable{T}"/>.
/// </summary>
/// <typeparam name="T">The type of results to return.</typeparam>
/// <param name="cnn">The connection to query on.</param>
/// <param name="sql">The SQL to execute for the query.</param>
/// <param name="param">The parameters to pass, if any.</param>
/// <param name="transaction">The transaction to use, if any.</param>
/// <param name="commandTimeout">The command timeout (in seconds).</param>
/// <param name="commandType">The type of command to execute.</param>
/// <returns>
/// A sequence of data of <typeparamref name="T"/>; if a basic type (int, string, etc) is queried then the data from the first column is assumed, otherwise an instance is
/// created per row, and a direct column-name===member-name mapping is assumed (case insensitive).
// note: in many cases of adding a new async method I might add a CancellationToken - however, cancellation is expressed via WithCancellation on iterators
while(awaitreader.NextResultAsync(cancel).ConfigureAwait(false)){/* ignore subsequent result sets */}
command.OnCompleted();
}
finally
{
if(readeris not null)
{
if(!reader.IsClosed)
{
try{cmd?.Cancel();}
catch{/* don't spoil any existing exception */}
}
awaitreader.DisposeAsync();
}
if(wasClosed)cnn.Close();
}
}
}
#endif
However, there shouldn't be any reason not to support IAsyncEnumerable on every target currently supported by Dapper, since there exists a well-maintained BCL package that adds the interface on older frameworks:
To allow for IAsyncEnumerable to work everywhere, it would just be a matter of including a dependency on the package above for the netstandard2.0 and net462 targets. This approach is used heavily by other libraries for this exact same purpose.
We currently have a solution that targets NET472 and we wanted to be able to tap into IAsyncEnumerable in a couple of places where we are currently being forced to use Task<IEnumerable<T>> methods such as QueryAsync.
Could there be an update to the library that adds support for the IAsyncEnumerable-returning methods for all frameworks based on the above suggestion?
The text was updated successfully, but these errors were encountered:
I'm very aware of the package, and use it extensively in some other libs. I'll try to do a quick "do any wheels fall off?" check, probably this weekend.
Currently,
IAsyncEnumerable
support is conditioned on .NET5 or greater. For example:Dapper/Dapper/SqlMapper.Async.cs
Lines 1252 to 1347 in 6434c69
However, there shouldn't be any reason not to support
IAsyncEnumerable
on every target currently supported by Dapper, since there exists a well-maintained BCL package that adds the interface on older frameworks:To allow for
IAsyncEnumerable
to work everywhere, it would just be a matter of including a dependency on the package above for thenetstandard2.0
andnet462
targets. This approach is used heavily by other libraries for this exact same purpose.We currently have a solution that targets NET472 and we wanted to be able to tap into
IAsyncEnumerable
in a couple of places where we are currently being forced to useTask<IEnumerable<T>>
methods such asQueryAsync
.Could there be an update to the library that adds support for the
IAsyncEnumerable
-returning methods for all frameworks based on the above suggestion?The text was updated successfully, but these errors were encountered: