|
[SL] Одна переменная для нескольких обработчиков
|
|||
---|---|---|---|
#18+
SeVa, rx развивается? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2012, 12:49 |
|
[SL] Одна переменная для нескольких обработчиков
|
|||
---|---|---|---|
#18+
SeVaЭлементарно Код: c# 1. 2. 3. 4. 5.
Неправильно. Метод Task2() должен принимать результат выполнения метода Task1(). Для чистоты эксперивента возьми за основу методы F1, F2 и F3 из моего примера. Преобразуй возвращаемые ими Task в IObservable (вроде это несложно) и покажи как будет выглядеть цепочка вызовов на Rx. Мне правда интересно. :-) SeVaПример и вопрос примитивный, тк task'и только под это заточены, а у rx возможностей большеБольшего не требуется. Мне надо чтобы именно это описывалось максимально удобным кодом. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2012, 13:00 |
|
[SL] Одна переменная для нескольких обработчиков
|
|||
---|---|---|---|
#18+
Алексей КSeVaЭлементарно Код: c# 1. 2. 3. 4. 5.
Неправильно. Метод Task2() должен принимать результат выполнения метода Task1(). Для чистоты эксперивента возьми за основу методы F1, F2 и F3 из моего примера. Преобразуй возвращаемые ими Task в IObservable (вроде это несложно) и покажи как будет выглядеть цепочка вызовов на Rx. Мне правда интересно. :-) SeVaПример и вопрос примитивный, тк task'и только под это заточены, а у rx возможностей большеБольшего не требуется. Мне надо чтобы именно это описывалось максимально удобным кодом. Код: sql 1. 2. 3. 4. 5.
Частная задача, а требуется значительно больше. Таски Без поддержки всех операторов linq - жалкая полова. Чуть усложним. Покажи код, когда Task1&Task2 выполняются последовательно,Task3 параллено им, все они возвращают коллекции и нужно определить минимальное и максимальное значение в объединенном наборе.Плюс должна быть обработка ошибок. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2012, 13:37 |
|
[SL] Одна переменная для нескольких обработчиков
|
|||
---|---|---|---|
#18+
SeVa Код: sql 1. 2. 3. 4. 5.
Ок, пасиб. SeVaТаски Без поддержки всех операторов linq - жалкая полова.Да ну. Это уже бантики. SeVaЧуть усложним. Покажи код, когда Task1&Task2 выполняются последовательно,Task3 параллено им, все они возвращают коллекции и нужно определить минимальное и максимальное значение в объединенном наборе.Плюс должна быть обработка ошибок. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2012, 13:51 |
|
[SL] Одна переменная для нескольких обработчиков
|
|||
---|---|---|---|
#18+
ViPRosSeVa, rx развивается? Да, есть уже бета 2.0 и будет native rx для winrt ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2012, 17:20 |
|
[SL] Одна переменная для нескольких обработчиков
|
|||
---|---|---|---|
#18+
Алексей КSeVa Код: sql 1. 2. 3. 4. 5.
Ок, пасиб. SeVaТаски Без поддержки всех операторов linq - жалкая полова.Да ну. Это уже бантики. SeVaЧуть усложним. Покажи код, когда Task1&Task2 выполняются последовательно,Task3 параллено им, все они возвращают коллекции и нужно определить минимальное и максимальное значение в объединенном наборе.Плюс должна быть обработка ошибок. Код: 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.
Весьма замысловато и неудобно, тк с полученными результатами можно работать только через одно место. C rx это делается в одну строчку ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2012, 17:45 |
|
[SL] Одна переменная для нескольких обработчиков
|
|||
---|---|---|---|
#18+
SeVaВесьма замысловато и неудобно, тк с полученными результатами можно работать только через одно место.Дискомфорта не испытываю. Если захочется LINQ - таски всегда можно преобразовать в IObservable. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2012, 05:42 |
|
[SL] Одна переменная для нескольких обработчиков
|
|||
---|---|---|---|
#18+
Алексей КSeVaВесьма замысловато и неудобно, тк с полученными результатами можно работать только через одно место.Дискомфорта не испытываю. Если захочется LINQ - таски всегда можно преобразовать в IObservable. Таски - процедурный стиль, rx - фукциональный. DbReader vs linq ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2012, 23:18 |
|
[SL] Одна переменная для нескольких обработчиков
|
|||
---|---|---|---|
#18+
Алексей КenigmaticНо ведь консольное приложение отрабатывает нормально. Уверен, проблемы из-за отличия CLR SL от CLR обычного дотнета.Нет. Отличие в том, что приложение консольное. А в силверлайтном приложении возникает мёртвая блокировка. Ожидание завершения при обращении к свойству task.Result в конструкторе в гуйном потоке + событие завершения идёт в гуйном потоке == мёртвая блокировка.Хотелось бы поблагодарить автора за этот ответ, т.к. этот ответ я пропустил. Вот здесь дали почти такой же, потом я собрался перепостить его сюда, а оказалось, что он здесь уже есть =) Алексей К , мне бы ваш опыт в понимании именно возникающего дедлока =) SeVaМогут и будут. Асинхронные вызовы могут выполняться в разной последовательности, вызовы нужно делать с дополнительным параметром state, который нужно анализировать в обработчике. Помимо этого есть утечки памяти. При множественных вызовах webrequest - более предпочтительных вариант, тк нет лишней диспетчеризации в ui поток.>Асинхронные вызовы могут выполняться в разной последовательности >вызовы нужно делать с дополнительным параметром state Чтобы иметь возможность их различать. При описанном в первом посте подходе этого не требуется. >Помимо этого есть утечки памяти Я бы попросил поподробнее, пожалуйста. >При множественных вызовах webrequest - более предпочтительных вариант, тк нет лишней диспетчеризации в ui поток. Согласен. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2012, 07:20 |
|
[SL] Одна переменная для нескольких обработчиков
|
|||
---|---|---|---|
#18+
enigmatic>Асинхронные вызовы могут выполняться в разной последовательности >вызовы нужно делать с дополнительным параметром state Чтобы иметь возможность их различать. При описанном в первом посте подходе этого не требуется. Асинхронные операции могут завершится не в том порядке, в котором их запускали. Часто в GUI-приложении нужен результат только последнего запущенного таска, если произошло несколько запусков одновременно. Одним из решений является передача state object с идентификатором, который проверяется при завершении операции. Мне же больше нравится такое решение: Идеальный код :-) Код: 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.
автор>Помимо этого есть утечки памяти Я бы попросил поподробнее, пожалуйста.Я утечек памяти не заметил. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2012, 08:06 |
|
[SL] Одна переменная для нескольких обработчиков
|
|||
---|---|---|---|
#18+
Алексей КАсинхронные операции могут завершится не в том порядке, в котором их запускали. Часто в GUI-приложении нужен результат только последнего запущенного таска, если произошло несколько запусков одновременно. Одним из решений является передача state object с идентификатором, который проверяется при завершении операции. Да, конечно. Но при описанном подходе ничего проверять не нужно, т.к. колбек таска жестко связан с его вызовом, и если нам нужно сделать обработку только последнего запущенного таска, то мы просто описываем эту обработку в колбеке последнего таска. Напротив, если использовать события - то обработчики не связаны с запрашивающими методами и нам нужны object state, чтобы понять, какой из обработчиков какому запросу соответствует. Алексей КМне же больше нравится такое решение: Идеальный код :-) Код: 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.
Если честно, меня терзают смутные сомнения, что у меня то же самое, но не на тасках =) Но таски (точнее не самими тасками, а контексте использования потоков), как видите, не пошли сразу и сходу, т.к. нужно понимать особенности диспетчеризации потоков, чем я пока похвастаться не могу :) Я еще посмотрю ваш идеальный код (когда поумнею :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2012, 12:00 |
|
[SL] Одна переменная для нескольких обработчиков
|
|||
---|---|---|---|
#18+
enigmatic... Да, конечно. Но при описанном подходе ничего проверять не нужно, т.к. колбек таска жестко связан с его вызовом, и если нам нужно сделать обработку только последнего запущенного таска, то мы просто описываем эту обработку в колбеке последнего таска. Напротив, если использовать события - то обработчики не связаны с запрашивающими методами и нам нужны object state, чтобы понять, какой из обработчиков какому запросу соответствует.Что-то я посмотрел первый пост и понял, что описанное неочевидно. Если хотите, я могу сделать выполнение обработки последнего запущенного таска и/или последнего принятого ответа. Будет показательный пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2012, 12:11 |
|
[SL] Одна переменная для нескольких обработчиков
|
|||
---|---|---|---|
#18+
enigmaticДа, конечно. Но при описанном подходе ничего проверять не нужно, т.к. колбек таска жестко связан с его вызовом, и если нам нужно сделать обработку только последнего запущенного таска, то мы просто описываем эту обработку в колбеке последнего таска.На каждый асинхронный вызов создаётся новый объект таска. Мы подписываемся на результат выполнения всех запущенных тасков, например, через ContinueWith. Может оказаться, что последний запущенный таск не будет последним выполненным. Типичная ситуация, master-detail. Может оказаться, что текущей записи в списке master будет показан detail "предыдущей текущей" записи в master. enigmaticНапротив, если использовать события - то обработчики не связаны с запрашивающими методами и нам нужны object state, чтобы понять, какой из обработчиков какому запросу соответствует.Тут ситуация аналогична, просто единственным способом будет передача state object. enigmaticЕсли хотите, я могу сделать выполнение обработки последнего запущенного таска и/или последнего принятого ответа. Будет показательный пример.Я ухожу в отпуск, не обещаю что посмотрю. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2012, 12:44 |
|
[SL] Одна переменная для нескольких обработчиков
|
|||
---|---|---|---|
#18+
enigmaticЕсли честно, меня терзают смутные сомнения, что у меня то же самое, но не на тасках =)Ничего удивительного. :-) Таски всего лиш более удобная реализация всем давно известных концепций. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2012, 12:46 |
|
[SL] Одна переменная для нескольких обработчиков
|
|||
---|---|---|---|
#18+
Алексей КНа каждый асинхронный вызов создаётся новый объект таска. Мы подписываемся на результат выполнения всех запущенных тасков, например, через ContinueWith. Может оказаться, что последний запущенный таск не будет последним выполненным. Типичная ситуация, master-detail. Может оказаться, что текущей записи в списке master будет показан detail "предыдущей текущей" записи в master.Хорошо, я все перепроверю. Алексей КЯ ухожу в отпуск, не обещаю что посмотрю. :-)Приятного отдыха! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2012, 13:03 |
|
|
start [/forum/topic.php?fid=21&msg=37840821&tid=1441749]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 140ms |
0 / 0 |