我想在我的WPF應用程序中使用HTTP調用查詢數據庫時使用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循環中迭代的東西。