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

Код: 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
04.04.2017, 16:04
    #39433023
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное чтение данных ExecuteReaderAsync
vb_sub,

покажи, как вызывается эта функция get_items.
...
Рейтинг: 0 / 0
04.04.2017, 16:34
    #39433042
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное чтение данных ExecuteReaderAsync
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
04.04.2017, 16:39
    #39433045
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное чтение данных ExecuteReaderAsync
vb_sub,

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


вызываю из синхронного метода (Sub --- End Sub)
...
Рейтинг: 0 / 0
04.04.2017, 18:19
    #39433106
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное чтение данных ExecuteReaderAsync
Я не очень понял. Если функция асинхронная, то зачем внутри ее делать асинхронный вызов?
...
Рейтинг: 0 / 0
04.04.2017, 21:35
    #39433177
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное чтение данных ExecuteReaderAsync
Cat2,
как я понял из документации -Async не делает функцию асинхронной, а указывает компилятору, что далее в коде можно встретить ключевое слово "Await", которое представляет все что после него, как задачу продолжения. Если просто добавить к функции слово Async- это не сделает ее асинхронной.
...
Рейтинг: 0 / 0
05.04.2017, 02:47
    #39433250
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное чтение данных ExecuteReaderAsync
vb_subCat2,
как я понял из документации -Async не делает функцию асинхронной, а указывает компилятору, что далее в коде можно встретить ключевое слово "Await", которое представляет все что после него, как задачу продолжения. Если просто добавить к функции слово Async- это не сделает ее асинхронной.
Вызов ExecuteReaderAsync сам по себе является асинхронным.
...
Рейтинг: 0 / 0
05.04.2017, 09:01
    #39433292
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное чтение данных ExecuteReaderAsync
Сон Веры Павловны,
Сон Веры ПавловныВызов ExecuteReaderAsync сам по себе является асинхронным.
, не спорю, только почему-то он не отрабатывает нормально.
...
Рейтинг: 0 / 0
05.04.2017, 09:14
    #39433297
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное чтение данных ExecuteReaderAsync
vb_subне отрабатывает нормально.ты так и не сказал в чем проблема. Не отрабатывает нормально - это отрабатывает, но ненормально? Возвращает записи через одну?
...
Рейтинг: 0 / 0
05.04.2017, 10:02
    #39433327
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное чтение данных ExecuteReaderAsync
Я сначала не сразу обратил внимание на то, что 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
05.04.2017, 10:15
    #39433333
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное чтение данных ExecuteReaderAsync
vb_subUI заблокировантак ты ж его сам заблокировал ожиданием .Result при вызове. Смысл писать асинхронную процедуру, если ты ее вызываешь синхронно?
...
Рейтинг: 0 / 0
05.04.2017, 10:58
    #39433364
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное чтение данных ExecuteReaderAsync
Shocker.Pro,
смысла нет, нужно действительно по-другому переписать асинхронное получение данных.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Асинхронное чтение данных ExecuteReaderAsync / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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