важких) (запит 500-700 ms) і повертає дані, а сюди ще треба додати логіку, яка з того що в результаті вийшло повинна робити вставку/апдейт в базу по декільком таблицям з валідацією
як поводитись з такими великими методами? тобто, як от це організовувати так, щоб воно працювало нормально, а не довго?
юзається паралель, але все ж в кінці мені приходиться всього очікувати і потім робити вставки в базу по декільком таблицям, а потім тільки повертати вже повний результат після вставки і вибірки
Спробувати усе у базі зробити. Наприклад через Stored proc
Parallel я би не використовував
починати з logical concurrency var op1 = DoOp1(); ... var opN = DoOpN(); … var opNext1 = opTakesNResult(await opN); var opNext2 = opTakes1Result(await op1); сенс в тому щоб скедюлити виконання тасків настільки рано наскільки можливо і блокувати логічний флоу виконання awaitом тільки на етапі коли потрібен результат
це тому що таски в сішарпі eagerly started що означає що вони починають виконуватись одразу як ти викликав асинхронний метод
ще однією технікою може бути склеїти кілька запитів до бази в єдиний multi-statement query через FromSqlXXX де ти опишеш свою квері SQL синтаксисом і проміжний стейт буде виключно на стороні бази і законсьюмиш вже один кінцевий результат
Обсуждают сегодня