Попаднах на малък проблем. Написах ASP.NET Web API и автоматично добавих async на контролера и сега,разбира се, изисква да използвам и await.
Проблемът е, че контролерът е свързан със service слоя, а този слой се свързва с data слоя.Data слоя е този, който извиква асинхронната версия на GET, за да направи асинхронно извикване на друга REST услуга- това е лесно, мога да направя метода от data слоя да има async и ще сложа await на извикването на HttpClient GetSync.
Но за да поддържа async/await service слоя, трябва да променя типа, който връща на Task. Но service слоя не прави нищо асинхронно. Той извиква data слоя, който всъщност извиква асинхронните методи на HttpClient.
Имам 2 възможности, имайки предвид ,че имам следната структура на слоевете:
ASP.NET Web Api >> Service Layer >> Data Layer
-Да използвам async/await само в data слоя.
-Или да сложа async/await в контролера и метода от service слоя. Това изисква рефакториране,за да променя типа,който връща на Task
Предполагам, че не го разбирам напълно.Предвид, че единствените блокиращи извиквания ще са в data слоя, за да се върнат всички нишки в thread pool-а трябва само да сложа async/await в data слоя?
Тогава трябва ли да използвам шаблони за контролерите?