powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Асинхронное чтение данных ExecuteReaderAsync
12 сообщений из 12, страница 1 из 1
Асинхронное чтение данных ExecuteReaderAsync
    #39432841
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, не могу корректно асинхронно считать данные.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 Public Async Function get_items() As Task(Of Dictionary(Of UInt32, good_item))

        Dim d As New Dictionary(Of UInt32, good_item)
        Dim connectionString = ConfigurationManager.ConnectionStrings("ms").ConnectionString
        Using con As New SqlConnection(connectionString)
            Using myCmd As SqlCommand = New SqlCommand("get_all_nom", con)
                myCmd.CommandType = CommandType.StoredProcedure
                Await con.OpenAsync()
                Using reader = Await myCmd.ExecuteReaderAsync()
                    While Await reader.ReadAsync()
                        d.Add(reader("nomenk_nomer"), New good_item With {.id = reader("id"), .nomenklatur_nomer = reader("nomenk_nomer"), .descr = reader("descr")})
                    End While
                    reader.Close()
                End Using
            End Using
            End Using
            Return d

    End Function



Код доходит до строчки
Код: vbnet
1.
Using reader = Await myCmd.ExecuteReaderAsync()

и потом дебаг заканчивается и данные не получаются соответственно. Если заменить ридер на синхронный

Код: vbnet
1.
2.
3.
4.
5.
6.
  Using reader = myCmd.ExecuteReader()
                    While reader.Read()
                        d.Add(reader("nomenk_nomer"), New good_item With {.id = reader("id"), .nomenklatur_nomer = reader("nomenk_nomer"), .descr = reader("descr")})
                    End While
                    reader.Close()
                End Using

, то все данные получаются нормально.

Вопрос - как правильно асинхронно считывать данные? Возможно нужно использовать WaitAll, однако читал в литературах, что это плохой тон.
P.S. к сожалению в шарп не смог перевести.
...
Рейтинг: 0 / 0
Асинхронное чтение данных ExecuteReaderAsync
    #39433023
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,

покажи, как вызывается эта функция get_items.
...
Рейтинг: 0 / 0
Асинхронное чтение данных ExecuteReaderAsync
    #39433042
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvik,
Код: vbnet
1.
 Public Async Function get_items() As Task(Of Dictionary(Of UInt32, good_item))


является функцией класса CommonData

Код: vbnet
1.
2.
3.
4.
Property dict_items As Dictionary(Of UInt32, good_item)' свойство для присваивания результата работы функции


Me.dict_items = ps.get_items.Result
...
Рейтинг: 0 / 0
Асинхронное чтение данных ExecuteReaderAsync
    #39433045
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,

Код: vbnet
1.
Me.dict_items = ps.get_items.Result


вызываю из синхронного метода (Sub --- End Sub)
...
Рейтинг: 0 / 0
Асинхронное чтение данных ExecuteReaderAsync
    #39433106
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Я не очень понял. Если функция асинхронная, то зачем внутри ее делать асинхронный вызов?
...
Рейтинг: 0 / 0
Асинхронное чтение данных ExecuteReaderAsync
    #39433177
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2,
как я понял из документации -Async не делает функцию асинхронной, а указывает компилятору, что далее в коде можно встретить ключевое слово "Await", которое представляет все что после него, как задачу продолжения. Если просто добавить к функции слово Async- это не сделает ее асинхронной.
...
Рейтинг: 0 / 0
Асинхронное чтение данных ExecuteReaderAsync
    #39433250
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subCat2,
как я понял из документации -Async не делает функцию асинхронной, а указывает компилятору, что далее в коде можно встретить ключевое слово "Await", которое представляет все что после него, как задачу продолжения. Если просто добавить к функции слово Async- это не сделает ее асинхронной.
Вызов ExecuteReaderAsync сам по себе является асинхронным.
...
Рейтинг: 0 / 0
Асинхронное чтение данных ExecuteReaderAsync
    #39433292
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,
Сон Веры ПавловныВызов ExecuteReaderAsync сам по себе является асинхронным.
, не спорю, только почему-то он не отрабатывает нормально.
...
Рейтинг: 0 / 0
Асинхронное чтение данных ExecuteReaderAsync
    #39433297
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subне отрабатывает нормально.ты так и не сказал в чем проблема. Не отрабатывает нормально - это отрабатывает, но ненормально? Возвращает записи через одну?
...
Рейтинг: 0 / 0
Асинхронное чтение данных ExecuteReaderAsync
    #39433327
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сначала не сразу обратил внимание на то, что UI заблокирован, потому что в Visual Studio все функции были отзывчивы.
По ходу это был Deadlock. Решил проблему через

Код: vbnet
1.
2.
3.
4.
5.
6.
 Using reader = Await myCmd.ExecuteReaderAsync.ConfigureAwait(False)
                    While Await reader.ReadAsync()
                        d.Add(reader("nomenk_nomer"), New good_item With {.id = reader("id"), .nomenklatur_nomer = reader("nomenk_nomer"), .descr = reader("descr")})
                    End While
                    reader.Close()
                End Using

- может кому пригодится.
...
Рейтинг: 0 / 0
Асинхронное чтение данных ExecuteReaderAsync
    #39433333
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subUI заблокировантак ты ж его сам заблокировал ожиданием .Result при вызове. Смысл писать асинхронную процедуру, если ты ее вызываешь синхронно?
...
Рейтинг: 0 / 0
Асинхронное чтение данных ExecuteReaderAsync
    #39433364
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
смысла нет, нужно действительно по-другому переписать асинхронное получение данных.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Асинхронное чтение данных ExecuteReaderAsync
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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