Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
MS SQL

Как из асинхронного метода получить объект?

26.03.2020, 18:37. Показов 5384. Ответов 24
Метки c# (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос
Как из асинхронного метода получить объект?

Используется
- Microsoft.EntityFrameworkCore;
- Microsoft.EntityFrameworkCore.SqlServer.


Описание
Я пробую сделать аналогичный проект.
Ссылка на проект - link // github.com

Я пробую повторить метод - `GetPosts(int index, int pageSize, string tag = null)`
Я хочу сделать аналогичный асинхронный метод с произвольным запросом.
Запрос например: `query = query.Where(p => p.ContactName.Contains("Maria"));`


Я пробую сделать простой метод:
C#
1
2
3
4
5
6
7
8
9
10
11
12
public Customer GetCustomers()
{
    Customer result = new Customer();
 
    using (var context = ContextFactory.CreateDbContext(ConnectionString))
    {
      var query = context.Customers.AsQueryable();                
      query = query.Where(p => p.ContactName.Contains("Maria")); //
      result = query as Customer;
    }
    return result;
}
Результат в строке `query = query.Where(p => p.ContactName.Contains("Maria"));` смотри картинку.

Вопрос
Как такой метод сделать асинхронным с таким же или другим запросом?

Попытка номер - 1. Результат - не работает
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public Task<Customer> GetCustomersTask()
        {
            // Customer result = new Customer();
 
            var result = new TaskCompletionSource<Customer>();
 
            using (var context = ContextFactory.CreateDbContext(ConnectionString))
            {
                Task.Run(() =>
                {
                    var query = context.Customers.AsQueryable();
                    query = query.Where(p => p.ContactName == "Maria");
 
                    result.SetResult(query as Customer);
                }
                );
            }
            return result.Task;
        }
Миниатюры
Как из асинхронного метода получить объект?   Как из асинхронного метода получить объект?  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.03.2020, 18:37
Ответы с готовыми решениями:

Как прекратить выполнение асинхронного метода
Есть форма. По событию mouseUp исполняется следующий код: _isDragging = false; if (_isClickOnly) { ...

Вызов асинхронного метода из события
Присваиваю событию ссылку на метод _mainView.StartBinaryTradeClickEventRaised += new EventHandler(OnStartBrTradeClickEventRaised); ...

Ожидание выполнение асинхронного метода
Всем привет. Помогите разобраться с асинхронным программированием. Пишу приложение для windows store Есть класс. В нем два асинхронных...

24
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
28.03.2020, 17:15
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Soft17 Посмотреть сообщение
Почему так происходит?
Видать где-то запускаете этот метод еще раз, не дожидаясь окончания выполнения предыдущего запуска.
0
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
28.03.2020, 20:29  [ТС]
1.
Цитата Сообщение от kolorotur Посмотреть сообщение
Видать где-то запускаете этот метод еще раз, не дожидаясь окончания выполнения предыдущего запуска.
Где?
См. картинку.
Я вроде ничего лишнего не вижу


2. Как это работает?
Имеется метод:
C#
1
2
3
4
5
6
7
using (var context = ContextFactory.CreateDbContext(ConnectionString))
            {
                var query = context.Customers.AsQueryable();
                query = query.Where(p => p.ContactName.Contains("Maria")); //
 
                return await query.ToListAsync();
            }
Если я правильно понимаю, то:
1. Принцип работы - не асинхронно. Подключаемся к БД.
C#
1
using (var context = ContextFactory.CreateDbContext(ConnectionString))
2. Принцип работы - не асинхронно. Загружаем всю таблицу в память.
C#
1
var query = context.Customers.AsQueryable();
3. Принцип работы - не асинхронно. Выполняем "запрос".
C#
1
query = query.Where(p => p.ContactName.Contains("Maria"));
4. Принцип работы - асинхронно. Преобразуем "запрос" в список.
C#
1
return await query.ToListAsync();
Миниатюры
Как из асинхронного метода получить объект?  
0
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
28.03.2020, 20:36  [ТС]
так?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
28.03.2020, 20:38
Лучший ответ Сообщение было отмечено Soft17 как решение

Решение

Цитата Сообщение от Soft17 Посмотреть сообщение
Где?
Где-то в вызывающих методах.

Цитата Сообщение от Soft17 Посмотреть сообщение
Как это работает?
Выполняется запрос к базе, асинхронно ожидается ответ и возвращается результат.

Цитата Сообщение от Soft17 Посмотреть сообщение
Принцип работы - не асинхронно. Подключаемся к БД.
Нет.
При создании экземпляра контекста соединение с базой не устанавливается.

Цитата Сообщение от Soft17 Посмотреть сообщение
Принцип работы - не асинхронно. Загружаем всю таблицу в память.
Нет.
AsQueryable ничего в память не загружает, а просто приводит к соответствующему интерфейсу.
В данном случае этот вызов вообще не нужен и из предложенного мной варианта я его убрал.
Зачем вы его вернули — не ясно.

Цитата Сообщение от Soft17 Посмотреть сообщение
Принцип работы - не асинхронно. Выполняем "запрос".
Нет.
Where создает объект, представляющий собой запрос.
Сам запрос не выполняется.

Цитата Сообщение от Soft17 Посмотреть сообщение
Принцип работы - асинхронно. Преобразуем "запрос" в список.
Вся работа выполняется в этом вызове: открывается соединение с базой, отправляется запрос, асинхронно ожидается ответ и преобразуется в список.
1
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
28.03.2020, 22:24  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
AsQueryable ничего в память не загружает, а просто приводит к соответствующему интерфейсу.
В данном случае этот вызов вообще не нужен и из предложенного мной варианта я его убрал.
Зачем вы его вернули — не ясно.
Списал отсюда: Раздел: "Давайте рассмотрим отличия между ToList AsEnumerable AsQueryable", статья: Ускоряемся в Entity Framework Core // habr.com
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.03.2020, 22:24
Помогаю со студенческими работами здесь

Приведите пример асинхронного метода
Привет! Я нашел много способов асинхронных операций в java, но что то все не то. Мне не нужен целый класс, наследованный от AsyncTask. ...

[wp 8.1] Вернуть значение из асинхронного метода
Есть код: public void openmyText() { string myTextit= LoadmyTextFromIsolatedStorage().ToString(); // не работает...

Принцип работы асинхронного метода BeginReceive
Здравствуйте. Можете объяснить как работает BeginReceive у сокетов? Сначала метод вызывается, указываются параметры; затем он ждет...

Юнит-тест для асинхронного метода
Доброго всем времени суток! В теме &quot;Логирование при использовании многопоточности&quot; уважаемый kolorotur помог мне написать...

Передача параметров и возврат значений из асинхронного метода
Для примера есть метод, который по замыслу должен в асинхронном режиме возвращать содержимое страницы. private async...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru