在我的 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;
}
回到等待异步方法完成的方法:
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 循环中迭代的东西。