I am able to compile
public async Task<IEnumerable<T>> GetResultsFromQueryExecutionId<T>(string queryExecutionId)
{
await using var csvResponseStream = await transferUtility.OpenStreamAsync("bucket", "blah.csv");
return GetResultsFromResponseStream<T>(csvResponseStream);
}
private IEnumerable<T> GetResultsFromResponseStream<T>(Stream csvResponseStream)
{
using var streamReader = new StreamReader(csvResponseStream);
using var csvReader = new CsvReader(streamReader, csvConfiguration);
foreach (var record in csvReader.GetRecords<T>())
{
yield return record;
}
}
but if I try to remove the private method and run the code in one method I get a compile error "The body of 'GetResultsFromQueryExecutionId' cannot be an iterator block because 'System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable>' is not an async iterator interface type"
I tried
public async Task<IEnumerable<T>> GetResultsFromQueryExecutionId<T>(string queryExecutionId, string logPrefix = null)
{
await using var csvResponseStream = await transferUtility.OpenStreamAsync("bucket", "blah.csv");
using var streamReader = new StreamReader(csvResponseStream);
using var csvReader = new CsvReader(streamReader, csvConfiguration);
foreach (var record in csvReader.GetRecords<T>())
{
yield return record;
}
}
I was expecting the code to be equivalent. Is anyone able to explain why the compiler will not allow me to combine this into one method please?