Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный? / 16 сообщений из 16, страница 1 из 1
27.01.2016, 17:00
    #39156762
potkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
Есть асинхронный контролер 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
27.01.2016, 17:01
    #39156764
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
potkin, нужно, но асинхронные методы не могут возвращать тип void.
...
Рейтинг: 0 / 0
27.01.2016, 17:05
    #39156771
potkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронные методы в WebAPI. Нужно ли метод объявлять как асинхронный?
Axeleronнужно
То есть асинхронный вызов самого метода:
Код: c#
1.
await Task.Run(() => methodPutMethod(param));


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



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


???

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

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



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

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

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

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

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

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

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


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