Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- List<headObj> heads = await _repo.GetHeadObjects();
- var detailTasks = heads.Select(s => _changeLogRepo.GetDetails(s.Id)
- .ContinueWith(c => new ChangeLogViewModel() {
- Head = s,
- Details = c.Result
- }, TaskContinuationOptions.OnlyOnRanToCompletion));
- await Task.WhenAll(detailTasks);
- //deadlock here
- return detailTasks.Select(s => s.Result);
- public async Task<IEnumerable<ItemChangeLog>> GetDetails(int headId)
- {
- using(SqlConnection connection = new SqlConnection(_connectionString))
- {
- return await connection.QueryAsync<ItemChangeLog>(@"SELECT [Id]
- ,[Description]
- ,[HeadId]
- FROM [dbo].[ItemChangeLog]
- WHERE HeadId = @headId", new { headId });
- }
- }
- Dictionary<int, Task<IEnumerable<ItemChangeLog>>> tasks = new Dictionary<int, Task<IEnumerable<ItemChangeLog>>>();
- //get details for each head and build the vm
- foreach(ItemChangeHead head in heads)
- {
- tasks.Add(head.Id, _changeLogRepo.GetDetails(head.Id));
- }
- await Task.WhenAll(tasks.Values);
- return heads.Select(s => new ChangeLogViewModel() {
- Head = s,
- Details = tasks[s.Id].Result
- });
Add Comment
Please, Sign In to add comment