Здравствуйте, Serginio1, Вы писали:
S>>Получается криво — внутри метода много однотипных оберток. Можно сделать все проще. S>Угу нужно пользоваться нормальными библиотеками. Которые не совмещают работу с потоками и задачами
Это две разные библиотеки. Она через потоки, другая через задачи. И вызывать их нужно в одном методе несколько раз. Оборачивать каждый вызов обычного метода в Task.Factory.StartNew — не красиво.
Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, Serginio1, Вы писали:
S>>>Получается криво — внутри метода много однотипных оберток. Можно сделать все проще. S>>Угу нужно пользоваться нормальными библиотеками. Которые не совмещают работу с потоками и задачами
S>Это две разные библиотеки. Она через потоки, другая через задачи. И вызывать их нужно в одном методе несколько раз. Оборачивать каждый вызов обычного метода в Task.Factory.StartNew — не красиво.
Сделай класс наследник и добавь асинхронные методы через LongRunning или через SG
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, Serginio1, Вы писали:
S>>Сделай класс наследник и добавь асинхронные методы через LongRunning или через SG
S>Т.е. вы таки весь мир хотите переделать на async? Для каждой библиотеки делать со-библиотеку наследника/обертку с асинхронной версией?
S>А нельзя ли без этой лишней работы?
Я предлагаю использовать нормальные асинхронные библиотеки, а не скрещивать работу с потоками и задачами.
Да для работы с асинхронным кодом должны быть и асинхронные библиотеки. На Windows Phone изначально не было методов с ожиданием выполнения другого потока или ожидание IO.
Если метод долгий то его нужно выделять в LongRunning
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Shmj, Вы писали:
S>Почему нельзя 1 раз указать этот LongRunning?
Можешь. Просто если метод быстрый (который может и проинлайниться), то зачем запускать отдельный поток?
Смысл асинхронного кода как раз в том, что есть немного синхронного кода, но большая часть кода выполняется в другом процессе (базы данных, HTTP сервера,TCP)
либо IO. Длинные методы как правило распараллеливаются и можно отдельно выделять LongRunning но таких методов немного
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, Serginio1, Вы писали:
S>>>Почему нельзя 1 раз указать этот LongRunning? S>> Можешь.
S>Каким образом?
Заверни весь синхронный код в Task с LongRunning
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>>Каким образом? S> Заверни весь синхронный код в Task с LongRunning
Если вызовов синхронных методов много (чередуются с async) и как долго они исполняются — не определено (зависит от данных) — предлагаете заворачивать каждый в отдельности? Как завернуть 1 раз для всех — вот в чем вопрос.
Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, Serginio1, Вы писали:
S>>>Каким образом? S>> Заверни весь синхронный код в Task с LongRunning
S>Если вызовов синхронных методов много (чередуются с async) и как долго они исполняются — не определено (зависит от данных) — предлагаете заворачивать каждый в отдельности? Как завернуть 1 раз для всех — вот в чем вопрос.
Ждать развития PGO, аналогом HotSpot https://github.com/dotnet/runtime/blob/main/docs/design/features/DynamicPgo.md
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Shmj, Вы писали:
S>Что-то давно этюдов не было. Не знаю тянет ли это на этюд, но попробую.
У тебя какая то фигня написана. Ты ни там ни там не ждешь завершения задач и непонятно что измеряешь. Лень экспериментировать, но разница, скорее всего, связана с настройкой IsBackground потоков.
Тебе надо что то вроде:
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>У тебя какая то фигня написана. Ты ни там ни там не ждешь завершения задач и непонятно что измеряешь. Лень экспериментировать, но разница, скорее всего, связана с настройкой IsBackground потоков.
Там по завершении задачи на экран выводится номер задачи. Синхронная версия отрабатывает 1-2 сек., асинхронная 1-2 мин.
Здравствуйте, alexander_r, Вы писали:
_>Здравствуйте, Shmj, Вы писали:
S>>...Синхронная версия отрабатывает 1-2 сек., асинхронная 1-2 мин. _>а как вы время замеряете, покажите весь код??
там же номер запуска — т.е. когда появляется на экране 999 тогда и конец.
ну или когда останавливается визуально мельтешение цифер в консоли.
Для усиления эффекта можно задержку не 1 сек а 10 сек сделать
Вы попробуйте — катастрофа тормоза настолько грандиозна, что и так видно без всяких измерений
— у меня разница 100 раз.
Возможно на мега супер компе будет меньше...
У меня начинаются тормоза с i=10 ! не 1000 а с 10 !!
Это вообще крест а асинках — их нельзя юзать если может вызваться больше 10 обработчиков одновременно?
Здравствуйте, alexander_r, Вы писали:
S>>...Синхронная версия отрабатывает 1-2 сек., асинхронная 1-2 мин. _>а как вы время замеряете, покажите весь код??
Там и так все понятно, разница на порядки. Ну могу дописать ожидание завершения всех задач, но это ничего не изменит.
Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, alexander_r, Вы писали:
S>>>...Синхронная версия отрабатывает 1-2 сек., асинхронная 1-2 мин. _>>а как вы время замеряете, покажите весь код??
S>Там и так все понятно, разница на порядки. Ну могу дописать ожидание завершения всех задач, но это ничего не изменит.
да, сделай ! там еще можно будет посмотреть зависимость от задержки, при 10 сек вообще кранты наступают системе.