|
C# async... await
|
|||
---|---|---|---|
#18+
Коллеги, помогите разобраться. Разрабатываю приложения работы с базой данных Oracle. Запросы могут быть долгоиграющими, поэтому на время его выполнения подключаю таймер и отражаю время в прогресс баре. - Ситуация 1: здесь и далее - await wsp.Entity_SP(ИмяХП, sp, asp, RowToEntity);- вызов хранимой процедуры Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
======= ПрогрессБар не работает. - Ситуация 2: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
======= ПрогрессБар штатно. Дискуссия состоялась здесь ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 19:41 |
|
C# async... await
|
|||
---|---|---|---|
#18+
ВМоисеев, дружище, ты и сам можешь половину работы сделать. Прогресс не работает когда нет потока. Включаем отладку и идём по шагам по строчкам. Если есть поток, то всё нормально. Если нет, то пишем сюда и смотрим где ты его стартовать должен. Окно потоков: Debug - Window - ... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 20:38 |
|
C# async... await
|
|||
---|---|---|---|
#18+
ВМоисеев, ну и можно сделать круче - не включать прогрессбар, пусть хранимка в фоне работает. Сделает - доложит). РазДисаблишь контрол какой нить. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 20:42 |
|
C# async... await
|
|||
---|---|---|---|
#18+
ВМоисеев Код: c# 1.
это что, извините, за лютейший пздц? какой асинк-эвейт здесь? боржоми водкой запивай, чтобы не било по печени! и это ещё что. прогресс бар на выполнение запросов? wat?! мдахх... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 20:53 |
|
C# async... await
|
|||
---|---|---|---|
#18+
hVosttи это ещё что. прогресс баресли помнишь, он у него бесконечный туда-сюда). хо-зя́-ин — ба́-рин. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 21:05 |
|
C# async... await
|
|||
---|---|---|---|
#18+
>hVostt, сегодня, 20:53 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21046939] [21046939] >это что, извините, за лютейший пздц? это здесь . >и это ещё что. прогресс бар на выполнение запросов? wat?! мдахх... на слайде, в низу окна, зеленая полоска. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 22:42 |
|
C# async... await
|
|||
---|---|---|---|
#18+
ВМоисеевна слайде, в низу окна, зеленая полоска. ну, тогда нормально по дизайну. С остальным то что? Основной вопрос не прогрессе ведь был. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 23:00 |
|
C# async... await
|
|||
---|---|---|---|
#18+
ВМоисеевэто здесь . никакой работы в вашем таске не выполняется, только синхронное ожидание выполнения запроса в отдельно выделенном потоке. хотя в том треде об этом неоднократно говорилось. наверное какие-то проблемы с усвоением информации. ВМоисеевна слайде, в низу окна, зеленая полоска. по какому принципу "зелёная полоска" заполняется? по коду вы не получаете информации о прогрессе. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 23:15 |
|
C# async... await
|
|||
---|---|---|---|
#18+
hVosttнаверное какие-то проблемы с усвоением информации дипломат)) hVosttпо какому принципу "зелёная полоска" заполняется? по коду вы не получаете информации о прогрессе. Иван Иваныч! Бесконечный прогрессбар когда чем ближе к концу тем медленнее. (предположение) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 23:36 |
|
C# async... await
|
|||
---|---|---|---|
#18+
ВМоисеев>hVostt, сегодня, 20:53 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21046939] [21046939] >это что, извините, за лютейший пздц? это здесь . >и это ещё что. прогресс бар на выполнение запросов? wat?! мдахх... на слайде, в низу окна, зеленая полоска. надо прогресс сверху, тогда хорошо показывается :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 23:41 |
|
C# async... await
|
|||
---|---|---|---|
#18+
>hVostt, сегодня, 23:15 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21047202] [21047202] >никакой работы в вашем таске не выполняется... Вы не правы: Код: 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.
>по какому принципу "зелёная полоска" заполняется? по коду вы не получаете информации о прогрессе. Практически определяется некий максимальный интервал выполнения самого длинного запроса для конкретного компьютера сети + гак и эта величина входит а настройки конкретного компа. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 23:43 |
|
C# async... await
|
|||
---|---|---|---|
#18+
ВМоисеев, и где же этот код? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 23:44 |
|
C# async... await
|
|||
---|---|---|---|
#18+
>ViPRos, сегодня, 23:41 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21047240][21047240] >надо прогресс сверху, тогда хорошо показывается :) Спасибо, завтра попробую ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 23:47 |
|
C# async... await
|
|||
---|---|---|---|
#18+
ViPRos, по тику что ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 23:47 |
|
C# async... await
|
|||
---|---|---|---|
#18+
ВМоисеев, ээ, ты чего? я первый раз себе позволил пошутить await нифига не делает в первом случае ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 23:49 |
|
C# async... await
|
|||
---|---|---|---|
#18+
да и во втором тоже делай через бакгроундворкер ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 23:51 |
|
C# async... await
|
|||
---|---|---|---|
#18+
>ViPRos, сегодня, 23:44 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21047245] [21047245] >и где же этот код? Вы об этом? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
где: pgbWin - ПрогрессБар iPgbFrm - счетчик секунд гп.tm_Запрос - максимальная величина ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 23:55 |
|
C# async... await
|
|||
---|---|---|---|
#18+
ВМоисеев, Код: 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. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 23:58 |
|
C# async... await
|
|||
---|---|---|---|
#18+
>ViPRos, сегодня, 23:51 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21047260][21047260] >...делай через бакгроундворкер Это уже проходил. Я получил то, что мне надо, но не знаю почему. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 23:59 |
|
C# async... await
|
|||
---|---|---|---|
#18+
ВМоисеев, второй вариант просто работает другой поток, потому рисует основной поток ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 00:00 |
|
C# async... await
|
|||
---|---|---|---|
#18+
>ViPRos, сегодня, 00:00 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21047280][21047280] >второй вариант просто работает другой поток, потому рисует основной поток Меня смутило, что это не работает: Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 00:09 |
|
C# async... await
|
|||
---|---|---|---|
#18+
ВМоисеев>ViPRos, сегодня, 00:00 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1280515&msg=21047280][21047280] >второй вариант просто работает другой поток, потому рисует основной поток Меня смутило, что это не работает: Код: c# 1. 2.
ты же это скопировал отсюда? почему н еработает Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 00:30 |
|
C# async... await
|
|||
---|---|---|---|
#18+
что бы твой метод был асинхронной и использовать await и т.д. надо что бы он был типа этого !!!TaskCompletionSource!!! Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 00:40 |
|
C# async... await
|
|||
---|---|---|---|
#18+
вот нашел для тебя хороший учебник На этот случай предусмотрен класс TaskCompletionSource<T>, позволяющий создать задачу Task, которой вы управляете как марионеткой. Вы можете в любой момент сделать эту задачу успешно завершившейся. Или записать в нее исключение и тем самым сказать, что она завершилась с ошибкой. Рассмотрим пример. Предположим, требуется инкапсулировать показываемый пользователю вопрос в следующем методе: Task<bool> GetUserPermission() Вопрос представляет собой написанный вами диалог, в котором у пользователя запрашивается какое-то разрешение. Поскольку запрашивать разрешение нужно в разных местах приложения, важно, чтобы метод было просто вызывать. Идеальная ситуация для использования асинхронного метода, так как мы не хотим, чтобы этот диалог отображался в потоке пользовательского интерфейса. Однако этот метод очень далек от традиционных асинхронных методов, в которых 54 Глава 6. Паттерн TAP производится обращение к сети или еще какая-то длительная операция. В данном случае мы ждем ответа от пользователя. Рассмотрим тело метода. private Task<bool> GetUserPermission() { // Создать объект TaskCompletionSource, чтобы можно было вернуть // задачу-марионетку TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>(); // Создать диалог PermissionDialog dialog = new PermissionDialog(); // Когда пользователь закроет диалог, сделать задачу завершившейся // с помощью метода SetResult dialog.Closed += delegate { tcs.SetResult(dialog.PermissionGranted); }; // Показать диалог на экране dialog.Show(); // Вернуть еще не завершившуюся задачу-марионетку return tcs.Task; } Обратите внимание, что метод не помечен ключевым словом async; мы создаем объект Task вручную и не нуждаемся в помощи компилятора. TaskCompletionSource<bool> создает объект Task и предоставляет к нему доступ через свойство Task. Мы возвращаем этот объект, а позже делаем его завершившимся, вызывая метод SetResult объекта TaskCompletionSource. Поскольку мы следовали паттерну TAP, вызывающая программа может просто ждать разрешения пользователя с помощью await. Код получается весьма элегантным: if (await GetUserPermission()) { .... Вызывает раздражение отсутствие неуниверсальной версии класса TaskCompletionSource<T>. Однако Task<T> – подкласс Task, поэтому его можно использовать всюду, где требуется объект Task. Это в свою очередь означает, что можно воспользоваться классом TaskCompletionSource<T>, и рассматривать объект типа Task<T>, являющийся значением свойства Task, как объект типа Task. Я обычно работаю с конкретизацией TaskCompletionSource<object> и для ее заполнения вызываю SetResult(null). При желании нетрудно создать неуниверсальную версию TaskCompletionSource, основываясь на универсальной ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 00:54 |
|
|
start [/forum/topic.php?fid=20&msg=39572375&tid=1399554]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 348ms |
total: | 504ms |
0 / 0 |