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;
}
: I가 반환 유형 Task<IEnumerable<Drawing>>
을 변환 할 수있을 것입니다 방법
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();
}
을 뭔가 foreach 루프에서 반복 할 수 있습니다.