powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Async Loading от Стивена Клири
25 сообщений из 111, страница 3 из 5
Async Loading от Стивена Клири
    #39524218
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Petro123пропущено...

Классно. В java такого нет. Руками чере поток делал.
А поток тут точно не создаётся? Надо будет проверить.Всё зависит от внутренностей ReadDataFromDatabaseAsync. Обычно это работает через порты завершения ввода/вывода. А всё содержимое метода Button1_Click в данном примере работает в UI потоке.

Грубо говоря, в момент завершения "таска" выполняется Dispatcher.BeginInvoke, в котором выполняется код, расположенный после await.
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524233
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К
Код: c#
1.
await DbRepository.ReadData


Погоди.
Внутри же поток?
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524235
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КОбычно это работает через порты з
Мы не про веб говорим.
Значит твой второй пример не годен.
Без потока только sleep и можно создать.
Как игрушку.
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524237
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Алексей К
Код: c#
1.
await DbRepository.ReadData


Погоди.
Внутри же поток?Ну там может быть что угодно, обычно там выполнение через порт завершения ввода/вывода , тот же пул потоков по сути.
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524240
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Алексей КОбычно это работает через порты з
Мы не про веб говорим.А какая разница, веб или не веб. Асинхронный ввод/вывод никто не запрещает использовать и в WPF приложениях.
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524242
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,
А я о том что без потоков асинхронности нету выше и сказал.
Task.Delay это игрушка
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524246
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Алексей К,
А я о том что без потоков асинхронности нету выше и сказал.
Task.Delay это игрушкаНу если в продолжение этой темы, то опять не соглашусь. Ну вот пример без таймера. Продолжение инициируется действиями пользователя.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
TaskCompletionSource<object> TaskSource = new TaskCompletionSource<object>();

async void Button1_Click(object sender, EventArgs e)
{
    MessageBox.Show("1");
    await TaskSource.Task;
    MessageBox.Show("2");
}

void Button2_Click(object sender, EventArgs e)
{
    TaskSource.SetResult(null);
}
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524249
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,
Я написал твой тест в проекте.
Твой await требует метод с возвратом Task
Т.е. вернулись к моему коду выше.
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524255
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Алексей К,
Я написал твой тест в проекте.
Твой await требует метод с возвратом Task
Т.е. вернулись к моему коду выше.Думаю, что TaskCompletionSource не создаёт потоков.
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524260
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу вот пример без таймера
Поставь ТЯЖЁлый метод for с вычислениями.
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524264
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КPetro123Алексей К,
Я написал твой тест в проекте.
Твой await требует метод с возвратом Task
Т.е. вернулись к моему коду выше.Думаю, что TaskCompletionSource не создаёт потоков.
Т.к. это GOTO ))))
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524275
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Алексей КНу вот пример без таймера
Поставь ТЯЖЁлый метод for с вычислениями.Это да, это обычно запускается через "тхридпул".

Но я привёл пример асинхронности без многопоточности, когда продолжение выполнения асинхронной операции инициируется действиями пользователя, всё работает в UI потоке через очередь сообщений.

Вон, в JavaScript многопоточности нет, а асинхронность есть, аж бесит иногда. :-)

Petro123Алексей Кпропущено...
Думаю, что TaskCompletionSource не создаёт потоков.
Т.к. это GOTO ))))Ну можно и так сказать. :-)
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524305
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВон, в JavaScript многопоточности нет, а асинхронность есть, аж бесит иногда. :-)
Да.
Тем более я с Java и мне странно всё это))).
Аффтар пусть пробует твои ссылки. Я попозже обязательно. Текучка.
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524338
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно, что про RX никто не вспомнил.
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524343
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>vb_sub, сегодня, 10:28 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1271937&msg=20811142] [20811142]
>...думаю тормозит здесь не совсем уместно...
Посмотри здесь
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524357
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныСтранно, что про RX никто не вспомнил.Время похоронило этот проект. :-)
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524371
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевдумаю тормозит здесь не совсем уместно...
Ну, если по ссылке ограничение ресурсов проца для тебя не тормоза, тогда конечно.
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524515
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>vb_sub, сегодня, 10:28 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1271937&msg=20811142] [20811142]
>...думаю тормозит здесь не совсем уместно...
Посмотри здесь Трудности перевода:


Оригинал:
async methods need to have an await keyword in their body or they will never yield!
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524605
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока нашел такой вариант, в принципе устраивает.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
private void initialflightlist()
        {
           items = new ObservableCollection<item>();

            var bk = new BackgroundWorker();
            bk.DoWork += async (s, e) =>
            {
                string connectionString = "##";
                using (OracleConnection connection = new OracleConnection())
                {
                    try
                    {
                        connection.ConnectionString = connectionString;
                        using (OracleCommand command = connection.CreateCommand())
                        {
                            string sql = $"sql";

                            command.CommandText = sql;

                            if (connection.State != ConnectionState.Open)
                                await connection.OpenAsync().ConfigureAwait(false);

                            DbDataReader reader = await command.ExecuteReaderAsync().ConfigureAwait(false);
                            if (reader.HasRows)
                            {
                                while (await reader.ReadAsync().ConfigureAwait(false))
                                {
                                    Application.Current.Dispatcher.Invoke(DispatcherPriority.Render, (Action)(() =>
                                     {
                                         items.Add(new item
                                         {
                                             item1 = Convert.ToString(reader["fld1"]),
                                             item2 = Convert.ToDateTime(reader["fld2"])
                                         });
                                     }));
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        //MessageBox.Show(ex.Message);
                    }
                    finally
                    {
                        if (connection.State == ConnectionState.Open)
                            connection.Close();
                    }
                }
            };
            bk.RunWorkerAsync();
            OnPropertyChanged("items");
			}
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524611
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,
А зачем 3 раза await, когда можно один раз на весь код сразу.
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524612
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И как себя ведёт ГУИ.
Сразу показ первых записей и потом докачка остальных или что?
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524614
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123vb_sub,
А зачем 3 раза await, когда можно один раз на весь код сразу.Чтобы поток не висел в ожидании ввода/вывода на всех этапах запроса, с этим всё в порядке.

Тут непонятно накой использовать BackgroundWorker и Dispatcher.Invoke ( тут лучше BeginInvoke ), когда лучше научиться пользоваться "тасками" и async|await.
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524634
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
здесь есть 2 стратегии
1) одним махом присваиваем все элементы коллекции свойству ViewModel.
Код: c#
1.
items=tempitems;


Этот вариант для меня нежелателен, потому что на мой взгляд больше просаживает GUI
2)добавление по одному элементу, как в примере - более желательный вариант, потому что визуально не видно заморозки GUI

Каждый элемент прорисовывается при добавлении. Можешь заценить как визуально выглядит по этой ссылке

https://stackoverflow.com/questions/44302328/how-to-properly-improve-itemscontrol-loading-and-avoid-freezing
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524637
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

потому что не получилось достичь аналогичного эффекта с помощью тасков.
В диспетчере на мой взгляд решает DispatcherPriority.Render - ставим приоритет для прорисовки.
...
Рейтинг: 0 / 0
Async Loading от Стивена Клири
    #39524639
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subКаждый элемент прорисовывается при добавлении.При включенной виртуализации записей каждый элемент не прорисовывается.
...
Рейтинг: 0 / 0
25 сообщений из 111, страница 3 из 5
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Async Loading от Стивена Клири
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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