Идея заключалась в том, чтобы использовать async в методе, который имеет цикл foreach и возвращает массив объектов.
Когда await Task.WhenAll(listOfTasks), действие не возвращает никаких данных результата JSON, оно возвращает System.Task, даже в ответ на браузер (firebug).
`public async Task GetEmployeeLeaveHistory(int page, int rows) { var empLeaveHistory = rr.GetLeaveApp(Convert.ToInt32(HttpContext.Session["EmpId"])); [code] int pageIndex = Convert.ToInt32(page) - 1; int pageSize = rows; int totalRecords = empLeaveHistory.Count(); int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize); var reqs = empLeaveHistory.OrderByDescending(m => m.DateFiled).Skip(pageIndex * pageSize).Take(pageSize); var rowsObj = new object[pageSize > totalRecords ? totalRecords : pageSize];
//var rowsObj = new List();
List listOfTasks = new List();
int i = 0; foreach (var req in reqs) { listOfTasks.Add(rr.ObjectRowsAsync(req, rowsObj, i)); i++; } System.Diagnostics.Debug.WriteLine($"Total tasks to be awaited: {listOfTasks.Count}");
await Task.WhenAll(listOfTasks);
if (totalRecords != 0) { for (int j = 0; j < rowsObj.Length; j++) { if (rowsObj[j] == null) { rowsObj[j] = new { id = j, cell = new object[] { j, j, "", "", "", "", "", "", "", "", "", "" } }; } } }
var result = new JsonResult { Data = new { total = totalPages, page = page, records = totalRecords, rows = rowsObj } };
string approvedBy = ""; if (leaveHeader.IsApproved == true) { approvedBy = ApprovedByName ?? "No Data"; } else if (leaveHeader.IsApproved == false && leaveHeader.IsDisapproved == true) { approvedBy = ApprovedByName ?? "No Data"; } string recommendedBy = ""; if (leaveHeader.IsRecommended == true || leaveHeader.IsDisapproved == true) { recommendedBy = RecommendedByName ?? "No Data"; } int leaveHeaderId = req.LeaveHeaderId; int? empId = req.EmployeeId;
string docsSubmitted = (from doc in context.LeaveDocSubmitteds where doc.DocSubmittedId == req.DocSubmittedId select doc.DocSubmittedDesc).SingleOrDefault() ?? "No Data";
string remarks = checkApprovedLeaveDetails(req.LeaveHeaderId) ?? "No Data";
rowsObj[i] = new { id = leaveHeaderId, cell = new object[] { leaveHeaderId, empId, dateFiled, leaveDuration, leaveType, numberOfDays, reason, docsSubmitted, recommendedBy, approvedBy, remarks , } };
}
} return rowsObj; } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e.InnerException); System.Diagnostics.Debug.WriteLine("Loop tasks failed"); throw; } finally { semaphore.Release(); } } [/code] Идея заключалась в том, чтобы использовать async в методе, который имеет цикл foreach и возвращает массив объектов. Когда await Task.WhenAll(listOfTasks), действие не возвращает никаких данных результата JSON, оно возвращает System.Task, даже в ответ на браузер (firebug).
Я пытаюсь запустить несколько неасинхронных методов одновременно, как показано ниже. Все функции определены в том же классе, что и функции-члены.
private string getEstimatedWaypointStart()
{
return id-1 ;
}
При возникновении нескольких исключений в вызове Task.WhenAll создается впечатление, что только одно из исключений поглощается задачей Task, когда вы ожидаете ее через более чем один уровень ожидания. У меня сложилось впечатление, что свойство...