Desidero utilizzare async/attendere quando si esegue una query su un database con una chiamata HTTP nella mia applicazione WPF. È la mia prima volta che utilizzo async/await, quindi se vedi qualche errore evidente, sentiti libero di indicarlo.Async/Await Iterate over return Task <IEnumerable <SomeClass>>
Il problema è che non sono più in grado di iterare sulla raccolta restituita, perché ora è un'attività di <IEnumerable<SomeClass>>
e, da quello che ho scoperto, l'attività non implementa IEnumerable/IEnumerator.
Il mio codice è simile al seguente: Il metodo che chiama il metodo async/await.
private void AddProjectDrawingAndComponentsFromServerToLocalDbAsync(CreateDbContext1 db, Project item)
{
var drawings = client.GetDrawingsAsync(item.ProjectId);
..... (waiting for GetDrawingsAsync to return, so i can iterate over the drawings)
db.SaveChanges();
}
Il metodo GetDrawingsAsync:
public async Task<IEnumerable<Drawing>> GetDrawingsAsync(int projectId)
{
var drawings = Task.Factory.StartNew(() => _client.Get(new GetDrawingsReq() { ProjectId = projectId }));
return await drawings;
}
Torna il metodo che attende il metodo asincrono per finire:
private void AddProjectDrawingAndComponentsFromServerToLocalDbAsync(CreateDbContext1 db, Project item)
{
var drawings = client.GetDrawingsAsync(item.ProjectId); <-- The returned Task<Task<IEnumerable<Drawing>>
Drawing prj_drawing = null;
foreach (var draw in drawings)
{
prj_drawing = new Drawing() { DrawingKey = draw.DrawingKey, Name = draw.Name, ProjectId = item.ProjectId };
item.AddDrawing(prj_drawing);
db.Projects.Add(item);
}
db.SaveChanges();
}
Come vorrei essere in grado di convertire il tipo restituito Task<IEnumerable<Drawing>>
a qualcosa che posso scorrere nel ciclo di foreach.