|
async / await and exception handling
|
|||
---|---|---|---|
#18+
Идея простая, по событию запускаем задачу на пуле задач для обработки действия. Пользователю показываю модалный диалог в котором отображаю прогресс. По завершению процесса закрываю диалог и выполнение идют дальше. Пытаюсь пременить async/await для разбиение поцесса на части. Вот что получается пока: Код: 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.
Что не получается: если во время обработки процесса происходит исключение то я хочу его обрабатывать в наружнем метчоде, (том, который вызывает async метод). Пока получается только "Unhandled Exception" Подскаычите, куда смотрет. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 16:02 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
mikron, смотрел на ютубе уроки по C# https://www.youtube.com/channel/UCmdZlsCXz57nazOdp_o5wAg ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 16:19 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
mikron, button1_Click должен быть async: Код: c# 1.
и тогда можно будет просто сделать Код: c# 1.
без task и Wait. И тогда получишь своё исключение. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 16:21 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
Использовать Tread.Sleep() в тасках ПЛОХАЯ идея! используйте await Task.Delay(ms) или Task.Delay(ms).Wait(); ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 16:38 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
mikron, Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 16:40 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
hVosttmikron, button1_Click должен быть async: Код: c# 1.
и тогда можно будет просто сделать Код: c# 1.
без task и Wait. И тогда получишь своё исключение. Так делать нельзя. В принципе конечно можно, но работать будет не так как надо. Когда по твоему выполнится dialog.ShowDialog(this); ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 18:07 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
Roman MejtesИспользовать Tread.Sleep() в тасках ПЛОХАЯ идея! используйте await Task.Delay(ms) или Task.Delay(ms).Wait(); Тут ежу понатно, что sleep только для демонстрации. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 18:09 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
mikronТак делать нельзя. В принципе конечно можно, но работать будет не так как надо. Когда по твоему выполнится dialog.ShowDialog(this); Код: c# 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 18:23 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
hVosttmikronТак делать нельзя. В принципе конечно можно, но работать будет не так как надо. Когда по твоему выполнится dialog.ShowDialog(this); Код: c# 1. 2. 3. 4. 5. 6. 7.
А это тут причем? Куда это вставлять? Идею не понял. Или я дурак или идея глупая. Приведи пример кода (или мой кусок исправь) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 18:42 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
mikronА это тут причем? Куда это вставлять? Что тут непонятного? dialog.ShowDialogAsync() ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 18:54 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
hVosttmikronТак делать нельзя. В принципе конечно можно, но работать будет не так как надо. Когда по твоему выполнится dialog.ShowDialog(this); Код: c# 1. 2. 3. 4. 5. 6. 7.
Kак работает async ты не понимаеш. Не растраивайся, нас милион. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 18:58 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
hVosttmikronА это тут причем? Куда это вставлять? Что тут непонятного? dialog.ShowDialogAsync() Просто заменить одну строчку dialog.ShowDialog(this)? Получим блокировку. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 19:01 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
mikronKак работает async ты не понимаеш. Не растраивайся, нас милион. mikronПросто заменить одну строчку dialog.ShowDialog(this)? Получим блокировку. Давненько не работал с WinForms, но я был бы очень рад, если ты пояснишь свою мысль. Возможно я ошибаюсь. Можно ещё через Dispatcher решить задачу. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 19:32 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
>mikron, сегодня, 16:02 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1247548&msg=20149979] [20149979] >Идея простая, по событию запускаем задачу ... Ситуация аналогичная - построение выборки с Oracle больше минуты, в интерактивном-то приложении. Полный облом. Надо заполнить ожидание. Подошел такой вариант - демонстратор процесса ожидания есть вращающийся земной шарик и прогрессбар. В одном пользовательском приложении: смысловое приложение - WinForm, демонстратор - WPF. Поступил так: Код: 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.
С уважением, Владимир ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 21:10 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
mikron, Думаю, с await здесь не прокатит. По старинке (Task.ContinueWith) не подходит? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2017, 21:11 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
hVosttmikronKак работает async ты не понимаеш. Не растраивайся, нас милион. mikronПросто заменить одну строчку dialog.ShowDialog(this)? Получим блокировку. Давненько не работал с WinForms, но я был бы очень рад, если ты пояснишь свою мысль. В DoItNowAsync после успешного завершения await необходимо переключение контекста (SynchrinisationConext) но для этого необходимо что-бы запустился message pump. В моей реализации это достигается dialog.ShowDialog(this); В твоей реализации этого никогда не произойдёт т.к. поток просто встанет в task.Wait(); И твой this.ShowDialog() из ShowDialogAsync тоже никда не запустится, по той-же причине. Просто проверь, код же ест. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2017, 00:08 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
>mikron, сегодня, 00:08 http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1247548&msg=20151610] [20151610] >...В моей реализации это достигается dialog.ShowDialog(this)... Вы рассматривали граничный вариант? Проходит? Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
С уважением, Владимир ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2017, 02:39 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
mikronПросто проверь, код же ес Я не поленился, и проверил. Картинка и код: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2017, 09:28 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
mikronВ DoItNowAsync после успешного завершения await необходимо переключение контекста (SynchrinisationConext) но для этого необходимо что-бы запустился message pump. В моей реализации это достигается dialog.ShowDialog(this); В твоей реализации этого никогда не произойдёт т.к. поток просто встанет в task.Wait(); И твой this.ShowDialog() из ShowDialogAsync тоже никда не запустится, по той-же причине. Ты какие-то нелепейшие глупости говоришь. У меня всё работает, я изначально привёл тебе решение, но ты даже не стал проверять. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2017, 09:29 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
hVosttmikronВ DoItNowAsync после успешного завершения await необходимо переключение контекста (SynchrinisationConext) но для этого необходимо что-бы запустился message pump. В моей реализации это достигается dialog.ShowDialog(this); В твоей реализации этого никогда не произойдёт т.к. поток просто встанет в task.Wait(); И твой this.ShowDialog() из ShowDialogAsync тоже никда не запустится, по той-же причине. Ты какие-то нелепейшие глупости говоришь. У меня всё работает, я изначально привёл тебе решение, но ты даже не стал проверять. Ты просил обяснить, но видно не в состоянии понять. Начнём с первого предложения, не пропуская слов. mikronВ DoItNowAsync после успешного завершения await необходимо переключение контекста (SynchrinisationConext) Переводу на доступный - закомнитруй выброс исключения. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2017, 10:30 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
mikronmikronВ DoItNowAsync после успешного завершения await необходимо переключение контекста (SynchrinisationConext) Переводу на доступный - закомнитруй выброс исключения. Я всё равно не понимаю, что ты хочешь сказать и к чему ведёшь. Вот твой изначальный вопрос: mikronЧто не получается: если во время обработки процесса происходит исключение то я хочу его обрабатывать в наружнем метчоде, (том, который вызывает async метод). Пока получается только "Unhandled Exception" Подскаычите, куда смотрет. Я тебе выше привёл полное решение, в котором твоё исключение попадает в «наружний метод» в чистом виде. Если мне не веришь, скопируй код, который я тебе привёл и выполни. Увидишь отлов своего исключения. Тем более ты мне что-то говорил, что это работать не будет, что будет какая-то блокировка — это не правда. Всё работает, никаких блокировок. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2017, 10:36 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
hVostt, Стоп, только сейчас заметил, ты изменил метод DoItNowAsync, убрал присваивание dialogResult. Посмотрю позже. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2017, 10:41 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
hVosttmikronА это тут причем? Куда это вставлять? Что тут непонятного? dialog.ShowDialogAsync() Я не люблю головоломок из области найди отличия Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2017, 11:01 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
mikronhVostt, Стоп, только сейчас заметил, ты изменил метод DoItNowAsync, убрал присваивание dialogResult. Посмотрю позже. Форма диалога должна сама устанавливать значение этого свойства и возвращать результат, установка этого свойства внешним кодом это жутковатый грубый костыль. Конечно я снёс это безобразие. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2017, 11:05 |
|
async / await and exception handling
|
|||
---|---|---|---|
#18+
mikronЯ не люблю головоломок из области найди отличия Обо всех отличиях было сказано выше, про async и метод расширения, про то, что task.Wait надо убрать я тоже писал. Не люблю повторяться, просто применил всё, что было сказано. Про присваивание диалогу значения свойства, тоже написал, но можно и присвоить если очень хочется. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2017, 11:06 |
|
|
start [/forum/topic.php?desktop=1&fid=20&tid=1400082]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 305ms |
total: | 448ms |
0 / 0 |