WPF アプリケーションで HTTP 呼び出しを使用してデータベースにクエリを実行するときに、async/await を使用したいと考えています。async/await を使用するのは初めてなので、明らかな間違いがあれば、遠慮なく指摘してください。
問題は、返された収集を反復処理できないことです。これは、現在は のタスクであり<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;
}
async メソッドの終了を待機するメソッドに戻ります。
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 ループで反復できるものに変換するにはどうすればよいでしょうか。