2017-11-02 14 views
-1

이전에이 질문을 받았지만이 작업을 수행하는 방법을 알 수 없습니다.작업 목록에서 결과 가져 오기

따라서 아래의 코드는 분명히 내가 await이라는 것을 쿼리에 포함한다는 의미에서 잘못되었습니다.

// GET: /<controller>/ 
    [HttpGet] 
    public new IActionResult Index() 
    { 
     var model = new List<Models.ViewModels.ApplicationUser.ListViewModel>(); 
     model = _userManager.Users.Select(u => new Models.ViewModels.ApplicationUser.ListViewModel 
     { 
      Id = u.Id, 
      Email = u.Email, 
      Name = u.GivenName + " " + u.SurName, 
      RoleNames = await _userManager.GetRolesAsync(u) 
     }).ToList(); 
     return View(model); 
    } 

이렇게하면 "await"연산자는 비동기식 람다 식에서만 사용할 수 있습니다. "라는 오류가 표시됩니다.

그래서, 내가 먼저 쿼리를 완성하고 난 람다 비동기합니다

// GET: /<controller>/ 
    [HttpGet] 
    public new IActionResult Index() 
    { 
     var model = new List<Models.ViewModels.ApplicationUser.ListViewModel>(); 
     // get users first, so I don't have to async something in a Select 
     var users = _userManager.Users.ToList(); 
     // make the lambda asyc 
     model = users.Select(async u => new Models.ViewModels.ApplicationUser.ListViewModel 
     { 
      Id = u.Id, 
      Email = u.Email, 
      Name = u.GivenName + " " + u.SurName, 
      RoleNames = await _userManager.GetRolesAsync(u) 
     }).ToList(); 
     return View(model); 
    } 

을하지만 그때 나는 그래서 기본적으로 (내 생각) 그것이 내가 Task하는의 목록을 말한다 Cannot implicitly convert type 'System.Collections.Generic.List<System.Threading.Tasks.Task<Models.ViewModels.ApplicationUser.ListViewModel>>' to 'System.Collections.Generic.List<Models.ViewModels.ApplicationUser.ListViewModel>'

를 얻을 수 나는 결과를 얻어야한다. 그러나이 결과를 어떻게 얻을 수 있습니까 Task? 또는 더 나은 방법 :이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

근접하지 않고 thisthisthis을 확인했습니다.

답변

1

model 변수의 이름은 List<Task<ApplicationUser>>입니다. List<ApplicationUser>을 얻으려면 모든 작업을 await해야합니다. 또한 현재 모든 사용자를 얻으려는 호출은 차단 유형으로 ToListAsync에 대해 전환 할 수 있습니다. 대신 다음을 시도해보십시오.

[HttpGet] 
public async Task<IActionResult> Index() { 
    var model = new List<Models.ViewModels.ApplicationUser.ListViewModel>(); 
    // get users first, so I don't have to async something in a Select 
    var users = await _userManager.Users.ToListAsync(); 
    // make the lambda asyc 
    modelTasks = users.Select(async u => new Models.ViewModels.ApplicationUser.ListViewModel { 
     Id = u.Id, 
     Email = u.Email, 
     Name = u.GivenName + " " + u.SurName, 
     RoleNames = await _userManager.GetRolesAsync(u) 
    }).ToList(); 
    var users = await Task.WhenAll(modelTasks); 
    return View(users); 
} 
+0

그래도 작동합니다! 고마워요. – Arjan