powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
16 сообщений из 16, страница 1 из 1
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
    #39156762
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть асинхронный контролер WebAPI, в котором вызывается метод:
Код: c#
1.
2.
3.
4.
public async Task<IHttpActionResult> PutMethod(int id, DocPurch docPurch, HttpRequestMessage request)
{
   await Task.Run(() => methodPutMethod(param));
}


Ну и сам метод:
Код: c#
1.
2.
3.
4.
private void methodPutMethod(string param)
{
   //...
}



Вот и сам вопрос:
Нужно ли объявлять метод как асинхронный?
Например так:
Код: c#
1.
2.
3.
4.
private async void methodPutMethod(string param)
{
   //...
}


???

Заранее спасибо!
...
Рейтинг: 0 / 0
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
    #39156764
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
potkin, нужно, но асинхронные методы не могут возвращать тип void.
...
Рейтинг: 0 / 0
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
    #39156771
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleronнужно
То есть асинхронный вызов самого метода:
Код: c#
1.
await Task.Run(() => methodPutMethod(param));


Недостаточен?
Нужно ещё и метод объявить как асинхронный?
...
Рейтинг: 0 / 0
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
    #39156784
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
potkinAxeleronнужно
То есть асинхронный вызов самого метода:
Код: c#
1.
await Task.Run(() => methodPutMethod(param));



Недостаточен?
Нужно ещё и метод объявить как асинхронный?
Если метод не имеет дело лишь с процессорным вычислением, то async не нужен, но такие методы нельзя использовать в библиотеках. А если помимо процессорных вычислений присутствует еще и input/output инструкции (как я думаю, это данный случай), то async нужен.
...
Рейтинг: 0 / 0
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
    #39156793
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. В методе есть обращение к БД, как на чтение так и на запись.
То есть, ещё каждое обращение к БД нужно делать так:
Код: c#
1.
2.
   db.Entry(ModelX).State = EntityState.Modified;
   await db.SaveChangesAsync();


???

2. И запуск из метода других методов.
Их тоже надо делать асинхронными и все операции вызываемых методов - асинхронными?
...
Рейтинг: 0 / 0
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
    #39157202
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleronpotkinпропущено...

То есть асинхронный вызов самого метода:
Код: c#
1.
await Task.Run(() => methodPutMethod(param));



Недостаточен?
Нужно ещё и метод объявить как асинхронный?
Если метод не имеет дело лишь с процессорным вычислением, то async не нужен, но такие методы нельзя использовать в библиотеках. А если помимо процессорных вычислений присутствует еще и input/output инструкции (как я думаю, это данный случай), то async нужен .... если есть необходимость оптимизации по уменьшению количества ожидающих потоков.

Axeleronpotkin, нужно, но асинхронные методы не могут возвращать тип void. Тип возвращаемого значения void
...
Рейтинг: 0 / 0
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
    #39157230
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
potkinТо есть, ещё каждое обращение к БД нужно делать так:Нужно понять что такое и зачем нужны порты завершения (Completion Ports) , поверх которых работает db.SaveChangesAsync() .
...
Рейтинг: 0 / 0
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
    #39157391
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КAxeleronпропущено...

Если метод не имеет дело лишь с процессорным вычислением, то async не нужен, но такие методы нельзя использовать в библиотеках. А если помимо процессорных вычислений присутствует еще и input/output инструкции (как я думаю, это данный случай), то async нужен .... если есть необходимость оптимизации по уменьшению количества ожидающих потоков.

Axeleronpotkin, нужно, но асинхронные методы не могут возвращать тип void. Тип возвращаемого значения void
Ну так и читаем:
MSDNОбъект, вызывающий асинхронный метод, возвращающий void, не может перехватывать исключения, созданные этим методом, и такие необработанные исключения могут привести к сбою приложения. Если исключение возникает в асинхронном методе, возвращающем Task или Task<TResult>, оно сохраняется в возвращенной задаче и создается повторно, когда задача ожидается.Поэтому убедитесь в том, что любой асинхронный метод, который может создавать исключение, имеет возвращаемый тип Task или Task<TResult>, и что вызовы этого метода ожидаются.
...
Рейтинг: 0 / 0
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
    #39157393
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КAxeleronпропущено...

Если метод не имеет дело лишь с процессорным вычислением, то async не нужен, но такие методы нельзя использовать в библиотеках. А если помимо процессорных вычислений присутствует еще и input/output инструкции (как я думаю, это данный случай), то async нужен .... если есть необходимость оптимизации по уменьшению количества ожидающих потоков.
Это здесь не при чем.
...
Рейтинг: 0 / 0
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
    #39157396
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
potkinИх тоже надо делать асинхронными и все операции вызываемых методов - асинхронными?
Необязательно.
...
Рейтинг: 0 / 0
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
    #39159085
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronАлексей Кпропущено...
... если есть необходимость оптимизации по уменьшению количества ожидающих потоков.

пропущено...
Тип возвращаемого значения void
Ну так и читаем:
MSDNОбъект, вызывающий асинхронный метод, возвращающий void, не может перехватывать исключения, созданные этим методом, и такие необработанные исключения могут привести к сбою приложения. Если исключение возникает в асинхронном методе, возвращающем Task или Task<TResult>, оно сохраняется в возвращенной задаче и создается повторно, когда задача ожидается.Поэтому убедитесь в том, что любой асинхронный метод, который может создавать исключение, имеет возвращаемый тип Task или Task<TResult>, и что вызовы этого метода ожидаются.
Ну и что? Асинхронные методы могут быть void - это главное.
AxeleronАлексей Кпропущено...
... если есть необходимость оптимизации по уменьшению количества ожидающих потоков.
Это здесь не при чем.Это здесь очень даже причём. Иначе, если нет необходимости такой оптимизации и нет необходимости в параллельном выполнении внутри одного http-запроса, то все эти асинхронности на сервере нах никому не нужны.
...
Рейтинг: 0 / 0
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
    #39159653
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Цель:
Оптимизации по уменьшению количества ожидающих потоков
Так, я не понял, нужно ли делать все обращения к БД, в методе (который вызван асинхронно) делать асинхронными?
...
Рейтинг: 0 / 0
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
    #39159726
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
potkinЦель:
Оптимизации по уменьшению количества ожидающих потоков
Так, я не понял, нужно ли делать все обращения к БД, в методе (который вызван асинхронно) делать асинхронными?Нужно или не нужно - решать тебе. Всё, что нужно для принятия решения, уже озвучено в данной теме.
...
Рейтинг: 0 / 0
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
    #39160018
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К
Тогда получается нужно и метод объявлять как асинхронный и все операции с БД через "await" и все методы в методе тоже делать асинхронными ...

П.С.
Мог бы Майкрософт упростить работу: вызвал метод асинхронно - значит все "действия" в методе происходят асинхронно.
...
Рейтинг: 0 / 0
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
    #39160072
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
potkin, советую почитать тут для принятия решения когда делать асинхронный запрос в БД, а когда нет.
...
Рейтинг: 0 / 0
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
    #39161453
Фотография potkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]