Какая польза от метода асинхронного ожидания, который вызывает только один из методов асинхронного ожидания?Сколько потоков они охватывают?Сколько процессора вы можете потреблять?Привет, в последнее время я вижу много методов, использующих ключевые слова async и await.Я до сих пор не могу обернуться вокруг их использования и основного поведения, а также их преимущества при применении, как показано ниже.Я также заметил проблему с процессором (на 100%), когда они используют его для всего, и я вижу thread.run как виновника использования ЦП в некоторых из этих случаев.
myController.cs
[HttpPost]
[ProducesResponseType(body)]
public async Task<IActionResult> Post([FromBody]Body body){
_MyClassService.sendMessage(body);
return Ok(body);
}
Мой класс обслуживания
Myclass.cs
private async void sendMessage(){
await SendToProperChannel();
}
private async Task SendToProperChannel(){
await DoWorkInProperChannel();
}
private Task<int> DoWorkInProperChannel(){
await SomethingThatTakes5Seconds();
return 1+1;
}
По моим небольшим знаниям.
Мы делаем запрос контроллера асинхронным, чтобы не блокироватьосновные потоки, позволяющие получать более высокую пропускную способность на уровне контроллера.
Мы также делаем все функции асинхронными, чтобы не блокировать верхние потоки, вызывающие эти методы.
Я также понимаю, что, поскольку мыу меня так много ожиданий, все возвращают задачу, но поток обрабатывает эту работу, ожидая ее завершения.
Я до сих пор не знаю номер потока, но думаю, что мы создаем более 1 потока.выполнить один запрос.
Мои вопросы.
Какая польза от ожидания одного лайнера, если верхний метод не может продолжаться безответ?На самом деле API может получать большую пропускную способность, но с этого момента все будет синхронизировано, и порождение большего количества потоков только для того, чтобы переходить между методами в моем классе не кажется здоровым.
Если я только ждув одном конкретном коде, в этом конкретном коде результат не будет таким же, как удаление awaits?
Все методы также будут обрабатывать большую пропускную способность, так как они не блокируют, но также порождают больше потоков?
Как выглядит синтаксис для запуска асинхронного метода и ожидания ответа внутри одного и того же метода.
Пример:
private async Task<int> myAsyncWorkerMethod(){
var myNeededValue=methodThatINeed();
var mySecondValue=methodWithSecondValue();
await myNeededValue;
await mySecondValue;
return myNeededValue+mySecondValue;
}
ЧтоЯвляется ли преимущество асинхронным и ожидать от наличия только пула потоков, который обрабатывает все нисходящие вызовы, который вы можете легко контролировать его размер и легко обнаруживать голодание потока и глубину очереди?(Я мог бы использовать здесь некоторые Java-термины, которые могут не применяться)
Мысли
В других языках я видел последствия изменения контекста потока, если ваш процессорнедостаточно мощен или у вас истощение потоков из-за размера пула потоков, разве этот неконтролируемый пул потоков .net не будет иметь таких же последствий и будет просто использовать процессор столько, сколько он хочет?
Вы не делаетенужно создать асинхронный вызов, если вам нужно, чтобы он возвращал ответ для оператора await.делать асинхронный нужно только тогда, когда вам нужно поработать над вышеуказанным методом?
Даже если вы ожидаете результатов метода от другого класса, если вы не хотите блокировать основной поток, вы также не должны ждатьит.
Заранее спасибо