powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Ошибка при работе в Asinc
3 сообщений из 3, страница 1 из 1
Ошибка при работе в Asinc
    #39522300
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу понять что не так.
Требуется изменить запись в таблице.
Если прямо в 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
Ошибка при работе в Asinc
    #39522301
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавлю, проблема именно с 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
Ошибка при работе в Asinc
    #39524877
Grunch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В случае async void метода TPL считает то раз метод ничего не возвращает, то и ожидать его завершения не надо.
С MSDN:
Асинхронное программирование с использованием ключевых слов Async и Await (C#)
MSDNАсинхронный метод может иметь тип возвращаемого значения void. Возвращаемый тип в основном используется для определения обработчиков событий, где требуется возвращать тип void. Асинхронные обработчики событий часто служат в качестве отправной точки для асинхронных программ.
Асинхронный метод, который имеет тип возвращаемого значения void, невозможно ожидать методом await. Вызывающий объект не может перехватывать исключения, которые выдает такой метод.
Короче говоря, асинхронный метотод всегда должен возвращать Task или Task<T> , если это не обработчик события. Обработчик события может возвращать void .
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Ошибка при работе в Asinc
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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