Poniższa metoda nie jest kompilowana. Alternatywy? Komunikatasync Zadanie <IEnumerable> z zwrotem plonów?
public static async Task<IEnumerable<object[]>> GetRecordsAsync(
this Transaction transaction,
string commandText,
params SqlParameter[] parameters)
{
// Get a SqlDataReader
var reader = await transaction.GetReaderAsync(commandText, parameters);
var fieldCount = -1;
// Begin iterating through records asynchronously
while (await reader.ReadAsync()) // Note we don't loop until .ReadAsync returns a boolean
{
// Grab all the field values out
if (fieldCount < 0)
fieldCount = reader.FieldCount;
var fields = new object[fieldCount];
reader.GetValues(fields);
// Yield return the field values from this record
yield return fields;
}
}
błędu:
Ciało 'TransactionExtensions.GetRecordsAsync (transakcji, łańcuch, params SqlParameter [])' nie może być blok iteracyjnej, ponieważ 'zadania>' jest typu interfejsu iteracyjnej
nie widzę sposobu na dostosowanie this answer do podobnego brzmienia (ale inny) pytanie, bo nie wiem a priori ile razy pętla pójdzie.
Edit: stałe formatowania
'' IEnumerable sama nie obsługuje tego. Użyj rozszerzeń reaktywnych. –
SLaks
Możesz użyć * ObservableCollection * do monitorowania dodawanych elementów. Utwórz i przenieś go do * GetRecordsAsync *, która teraz tylko zwróci * Zadanie *, i dodaj do niego, gdy będziesz gotowy, by uzyskać 'pola'. Teraz, gdy o tym myślę, możliwe jest również przekazanie delegatowi "na otrzymane pola" do tej metody. – IllidanS4
@ IllidanS4 Myślę, że to sprowadza się do komentarza podanego przez SLaks. Zarówno dobre pomysły, jak i Reactive Extensive przynoszą wiele innych gadżetów do znoszenia –