|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
Всем привет, решил попробовать асинхронно загрузить данные по аналогии с https://msdn.microsoft.com/ru-ru/magazine/dn605875.aspx. Код: 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. 54. 55. 56. 57. 58. 59. 60.
Код: xml 1.
В итоге при загрузке все равно визуальный интерфейс фризится. Когда ставлю брекпоинт на return ListItemtemp , отладчик показывает, что выполнение происходит в основном потоке, хотя в примере из статьи- во второстепенном. У кого-то работал аналогичный подход корректно? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 21:32 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
vb_sub, Мне где то говорили что в wpf ленивая загрузка есть из коробки. Тогда не понял ваш сабж. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 08:13 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
vb_sub, 20 сек открывается 60 килозаписей. Есть Lazy из коробки в платформе? Но я пока приостановил тот сабж. Другие задачи поставили. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 08:25 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
Petro123, Вы имеете ввиду скорее всего Priority Binding, но это когда нужно показать что-то, пока не загрузится основной Binding.Не знаю фризится при этом интерфейс или нет, но это к сожалению не то, что нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 08:25 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
Petro123, lazy это когда объект инициализируется при первой потребности в нем- соответственно все равно, когда лист item будет инициализироваться, то он заморозит интерфейс. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 08:27 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
vb_sub, "Показать что то, пока...", фризится, тормозит - это всё одно и то же. Разве нет? Ты опиши задачу от пользователя. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 09:07 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
vb_sublazy Да. Вроде решили, что это слово говорит о ленивой загрузке не основной коллекции, а чилдрен подчиненных объектов. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 09:10 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
vb_subрешил попробовать асинхронно загрузить данные Один в один мой топик. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 09:12 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
vb_subВ итоге при загрузке все равно визуальный интерфейс фризится. Когда ставлю брекпоинт на return ListItemtemp, отладчик показывает, что выполнение происходит в основном потоке , хотя в примере из статьи- во второстепенном. У кого-то работал аналогичный подход корректно?А что, если вставить строку: Код: c# 1. 2.
Выполнение так и останется в основном потоке? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 14:31 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
Асинхронное выполнение <> многопоточное. попробуйте просто обернуть в свой Task, можно даже свой планировщик тогда определить ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 15:11 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
refreg, тогда вообще дичь получается- программа падает в бесконечный цикл и будет бесконечно возвращать return через значение временной задержки (данные в UI не передаются). Когда смотрел статус задачи из примера то ее статус RunToCopletion, если же ставлю задержку в свой пример, то там все время статус WaitForActivation-то есть она не успевает запуститься. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 15:25 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
>vb_sub, вчера, 21:32 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1271937&msg=20807374][20807374] >...решил попробовать асинхронно загрузить данные ... Посмотри здесь . С уважением, Владимир ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 15:41 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
vb_subrefreg, тогда вообще дичь получается- программа падает в бесконечный цикл и будет бесконечно возвращать return через значение временной задержки (данные в UI не передаются). Когда смотрел статус задачи из примера то ее статус RunToCopletion, если же ставлю задержку в свой пример, то там все время статус WaitForActivation-то есть она не успевает запуститься.Ну попробуй время уменьшить до 1 милисекунды. Но это не решение твоей проблемы. Проблема глубже. Когда ты вызываешь асинхронный метод, то нет никакой гарантии, что асинхронный метод создаст задачу на выполнение. Метод может выполняться синхронно. Например, может быть такая логика - пробуем выполнить синхронно. Если за какое-то время ответ получить не удалось, создаем задачу. У тебя в коде много быстрых асинхронных вызовов - и ты, не можешь быть уверен, что они вызываются действительно асинхронно. В данном случае, тебе надо быть уверенным, что метод initialitemlist будет выполняться в отдельном потоке. Поэтому желательно, создать отдельный поток самому. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 15:59 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
refregПоэтому желательно, создать отдельный поток самому. Это будет ещё на пару экранов кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 16:02 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
Roman MejtesАсинхронное выполнение <> многопоточное Везде где делал await смотрел в отладчике, код выполнялся не в потоке ГУИ. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 16:04 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
Petro123refregПоэтому желательно, создать отдельный поток самому. Это будет ещё на пару экранов кода.Task.Factory.StartNew ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 16:05 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
Petro123Roman MejtesАсинхронное выполнение <> многопоточное Везде где делал await смотрел в отладчике, код выполнялся не в потоке ГУИ.ТС не обладает таким везением ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 16:08 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
Я вот смотрю, аффтар хочет не тормозя ГУИ загрузить свою коллекцию items для показа в ГУИ. Вероятно сейчас загрузка у него секунд 15. Получается руками надо в wpf писать такую фичу? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 16:09 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
refregТС не обладает таким везением дай ссылку как и кто определяет в потоке будет код или решит не надо). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 16:11 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
refregTask.Factory.StartNew У меня после wait разумеется метод: Task myMetod { Return Task.Run ( .. А как иначе)) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 16:18 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
refregКогда ты вызываешь асинхронный метод, то нет никакой гарантии, что асинхронный метод создаст задачу на выполнение. Я так понял, ты про случай когда метод писал не ты сам. Ок. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 16:25 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
refregКогда ты вызываешь асинхронный метод, то нет никакой гарантии, что асинхронный метод создаст задачу на выполнение. Метод может выполняться синхронно. Вызывая Async метод мы в любом случае выполняем таск (задачу), вопрос лишь в том, в каком потоке эта задача будет выполняться. асинхронные операции могут выполняться в однопоточном приложении и много поточком. Им нет до этого никакого дела. Асинхронной операцией называют ту, которая может прервать своё выполнение, а затем продолжить. То есть, в рамках 1 потока, 2 асинхронные задачи будут работать не одновременно, а чередуясь друг с другом. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 16:40 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
и сам по себе Task обеспечивает именно асинхронность, а за многопоточное выполнение тасков отвечает его планировщик. Именно планировщик запускает таски в пуле потоков, сами по себе они в других потоках выполняться не будут. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 16:42 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
Roman MejtesТо есть, в рамках 1 потока, 2 асинхронные задачи будут работать не одновременно, а чередуясь друг с другом. Очень прикольно. Пример есть? Асинхронного вызова метода без потока? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 16:46 |
|
Async Loading от Стивена Клири
|
|||
---|---|---|---|
#18+
есть олдскульная тема с с Dispatcher.BeginInvoke и тд, чтобы избежать фриза интерфейса, но хз кто ей сейчас пользуется. Одним из сдерживающим моментом является то, что длительная операция запускается из конструктора ViewModel, соответственно асинхронность на высшем уровне использовать нельзя- нужно переписывать на асинхронный конструктор. Еще неопределенности добавляет неизвестность того, что фризит объект- сама длительная операция или рендеринг GUI- нужно лезть через Perforator, но это опять не получится потому что не успею сразу запустить и Perforator и рабочий процесс, соответственно нужно загрузку переносить на какую-то кнопку. В общем чтобы проверить нужно норм так всего переписать и не факт, что узнаешь истину. Обидно, что чел так накалывает с асинхронностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2017, 16:52 |
|
|
start [/forum/topic.php?fid=21&fpage=7&tid=1440497]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
98ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 235ms |
total: | 445ms |
0 / 0 |