Я прочитал некоторые посты и статьи на inte rnet, в которых говорится, что я не должен использовать asyn c, пока мои вызовы не станут IO (чтение файла, отправка запроса и т. Д. c.). Но если вызывающий API на самом деле связан с IO и не поддерживает асинхронные вызовы c, я должен обернуть их Task.Run()
?
Скажите, если у меня сервер MVC вызывает внешний сервер через API для получения данных, но в API нет методов asyn c. Есть ли в этом случае преимущество переноса вызовов syn c с asyn c?
Как я понимаю, если не перенос, то все вызовы API являются syn c, и каждый вызов my * Приложение 1026 * использует поток из пула потоков. Во втором случае Task.Run()
поставит мою задачу в очередь потоков, но освободит основной поток. Является ли выпущенная основная тема полезной, или ее не стоит оборачивать? Правильно ли я здесь?
РЕДАКТИРОВАТЬ Хорошо, вот еще некоторые подробности, запрошенные людьми.
У меня есть сторонняя организация. NET сборка, которую я ' Я вынужден использовать. Я не могу просто позвонить на веб-сервис напрямую. Это выглядит примерно так:
// the API (I not owner of it, can't change it):
public class Service {
/* everything is synchronous like this. but somewhere inside
it still makes HTTP requests to external server, so that's
kinda IO. just the lib is very old and doesn't provide async methods*/
public Data GetData(Paramters parameters);
}
// here comes my code.
// option 1. sync controller
public class MyController {
public ActionResult GetDataById(string id) {
var data = new Service().GetData(new Parameters{Id = id});
// process and return some result ...
}
}
// option 2. async controller
public class MyController {
public async ActionResult GetDataById(string id) {
var result = await Task.Run(() => new Service().GetData(new Parameters{Id = id}));
// process and return some result ...
}
}
Итак, вопрос в том, имеет ли смысл использовать вариант 2?