WPFアプリケーションでHTTP呼び出しを使用してデータベースを照会するときにasync/awaitを使用します。 async/awaitを使ったのは初めてのことです。明らかな間違いがある場合は、それらを指摘してください。Async/Await返されたタスクを反復処理します。<IEnumerable <SomeClass>>
問題は、返された収集をもう一度処理できないためです。これは今は<IEnumerable<SomeClass>>
のタスクであり、私が知ったことから、タスクはIEnumerable/IEnumeratorを実装していません。
私のコードは次のようになります: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();
}
方法GetDrawingsAsync:
戻る終了する非同期メソッドを待ち方法にpublic async Task<IEnumerable<Drawing>> GetDrawingsAsync(int projectId)
{
var drawings = Task.Factory.StartNew(() => _client.Get(new GetDrawingsReq() { ProjectId = projectId }));
return await drawings;
}
:
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();
}
どのように私はに戻っタイプTask<IEnumerable<Drawing>>
を変換することができるだろうforeachループで繰り返し処理できるもの。