Guest User

Untitled

a guest
Oct 23rd, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.14 KB | None | 0 0
  1. List<headObj> heads = await _repo.GetHeadObjects();
  2. var detailTasks = heads.Select(s => _changeLogRepo.GetDetails(s.Id)
  3. .ContinueWith(c => new ChangeLogViewModel() {
  4. Head = s,
  5. Details = c.Result
  6. }, TaskContinuationOptions.OnlyOnRanToCompletion));
  7.  
  8. await Task.WhenAll(detailTasks);
  9.  
  10. //deadlock here
  11. return detailTasks.Select(s => s.Result);
  12.  
  13. public async Task<IEnumerable<ItemChangeLog>> GetDetails(int headId)
  14. {
  15. using(SqlConnection connection = new SqlConnection(_connectionString))
  16. {
  17. return await connection.QueryAsync<ItemChangeLog>(@"SELECT [Id]
  18. ,[Description]
  19. ,[HeadId]
  20. FROM [dbo].[ItemChangeLog]
  21. WHERE HeadId = @headId", new { headId });
  22. }
  23. }
  24.  
  25. Dictionary<int, Task<IEnumerable<ItemChangeLog>>> tasks = new Dictionary<int, Task<IEnumerable<ItemChangeLog>>>();
  26. //get details for each head and build the vm
  27. foreach(ItemChangeHead head in heads)
  28. {
  29. tasks.Add(head.Id, _changeLogRepo.GetDetails(head.Id));
  30. }
  31. await Task.WhenAll(tasks.Values);
  32.  
  33. return heads.Select(s => new ChangeLogViewModel() {
  34. Head = s,
  35. Details = tasks[s.Id].Result
  36. });
Add Comment
Please, Sign In to add comment