Гость
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Ошибка при работе в Asinc / 3 сообщений из 3, страница 1 из 1
17.09.2017, 09:28
    #39522300
asdor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при работе в Asinc
Не могу понять что не так.
Требуется изменить запись в таблице.
Если прямо в async Task<ActionResult> прописываю, все ок
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> DeleteConfirmed(int id)
        {
            Person person = await db.Persons.FindAsync(id);
            person.IsMark = 1;
            db.Entry(person).State = EntityState.Modified;
            await db.SaveChangesAsync();
            return RedirectToAction("Index");
        }


При переносе кода модификации в репозиторий, при выполнении выскакивает ошибка
"Асинхронной модуль или обработчик завершил работу, когда асинхронная операция была ещё в состоянии ожидания."
Контроллер
Код: c#
1.
2.
3.
4.
5.
        public async Task<ActionResult> DeleteConfirmed(int id)
        {
            repo.DelPerson(id);
            return RedirectToAction("Index");
        }


Репозиторий
Код: c#
1.
2.
3.
4.
5.
6.
7.
        public async void DelPerson(int id)
        {
            Person person= await db.Persons.FindAsync(id);
            person.IsMark = 1;
            db.Entry(person).State = EntityState.Modified;            
            await db.SaveChangesAsync();
        }


Пытаюсь понять в чем дело. Не догоняю(
...
Рейтинг: 0 / 0
17.09.2017, 09:33
    #39522301
asdor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при работе в Asinc
Добавлю, проблема именно с void, если делаю функцию
Код: c#
1.
2.
3.
4.
5.
6.
7.
        public async Task<int> DelPerson(int id)
        {
            Person person= await db.Persons.FindAsync(id);
            person.IsMark = 1;
            db.Entry(person).State = EntityState.Modified;            
            return await db.SaveChangesAsync();
        }


а в контроллере await repo.DelPerson(id);

то все как часы.
Хочется понять про Void/
...
Рейтинг: 0 / 0
22.09.2017, 14:04
    #39524877
Grunch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при работе в Asinc
В случае async void метода TPL считает то раз метод ничего не возвращает, то и ожидать его завершения не надо.
С MSDN:
Асинхронное программирование с использованием ключевых слов Async и Await (C#)
MSDNАсинхронный метод может иметь тип возвращаемого значения void. Возвращаемый тип в основном используется для определения обработчиков событий, где требуется возвращать тип void. Асинхронные обработчики событий часто служат в качестве отправной точки для асинхронных программ.
Асинхронный метод, который имеет тип возвращаемого значения void, невозможно ожидать методом await. Вызывающий объект не может перехватывать исключения, которые выдает такой метод.
Короче говоря, асинхронный метотод всегда должен возвращать Task или Task<T> , если это не обработчик события. Обработчик события может возвращать void .
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Ошибка при работе в Asinc / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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