Всем привет.
Ситуация:
есть asp.net core mvc приложение, в нём async action который асинхронно вызывает метод M класса SBL
public async Task<ActionResult> A([FromBody]T r) {
var res = await SBL().M(r);
return res;
}
//сигнатура метода TBL.M примерно такая:
public class TBL {
// без async await, но здесь логики нет, просто пробрасывается вызов
public Task<D> M(T r) {
return DBL().M(r);
}
}
//сигнатура метода DBL.M примерно такая:
public class DBL {
public async Task<N> M (T r) {
// тут какая-то сложная логика
return {что-то};
}
}
т.е. async метод, вызывает не async метод который вызывает async метод.
насколько это легально, такой подход имеет место быть?
Здравствуйте, milvic, Вы писали:
M>Всем привет.
M>Ситуация:
M>есть asp.net core mvc приложение, в нём async action который асинхронно вызывает метод M класса SBL
M>M>public async Task<ActionResult> A([FromBody]T r) {
M> var res = await SBL().M(r);
M> return res;
M>}
M>
M>//сигнатура метода TBL.M примерно такая:
M>M>public class TBL {
M> // без async await, но здесь логики нет, просто пробрасывается вызов
M> public Task<D> M(T r) {
M> return DBL().M(r);
M> }
M>}
M>
M>//сигнатура метода DBL.M примерно такая:
M>M>public class DBL {
M> public async Task<N> M (T r) {
M> // тут какая-то сложная логика
M> return {что-то};
M> }
M>}
M>
M>т.е. async метод, вызывает не async метод который вызывает async метод.
M>насколько это легально, такой подход имеет место быть?
Тут все ок.
Надо понимать, что async — это деталь реализации. Для вызывающего TBL.M лишь важно, что метод DBL.M возвращает Task, который TBL может await. Как метод DBL.M получает Task, его дело. Если он хочет вернуть Task, созданный кем-то другим, не проблема.