Entity Framework Task.WhenAll не запускает задачу параллельно - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь разделить два метода с вызовами EF и объединить их после завершения

            var startDate = StartDate;
            var endDate = EndDate;

            var middleDate = startDate.AddDays((endDate.Day) / 2);

            var db1 = new DbContext();
            var db2 = new DbContext();
            var responsePart1 =  GetAvailableCalendarDatesAndSlots(db1, startDate, middleDate);
            var responsePart2 =  GetAvailableCalendarDatesAndSlots(db2, middleDate.AddDays(1), endDate);
            await Task.WhenAll(responsePart1,responsePart2);
            var finalResponse = responsePart1.Result.Concat(responsePart2.Result).ToList();

Однако, когда я просматриваю свой журнал, кажется, что они не работают параллельно.Для метода GetAvailableCalendarDatesAndSlots выполнение задач занимает 3 секунды из-за длинных диапазонов дат.Я планирую снизить его до 1,5 сек, если это возможно.

Как я могу заставить их работать в параллель?

1 Ответ

0 голосов
/ 06 октября 2018

using System.Threading.Tasks;
class programe
{
 // db1, startDate, middleDate all should static variables
 private static R resdata;
 public  static async Task Main(string[] args)
 {
	Parallel.ForEach(GetSlots(db1, startDate, middleDate), async x =>
        {
		resdata.res += x;
	}

 }
 private static string GetSlots(db1, startDate, middleDate)
 {
	return GetAvailableCalendarDatesAndSlots(db1, startDate, middleDate);
 }	
}

public class R
{
public string res { get;set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...