Ответы пользователя по тегу Асинхронное программирование
  • Как использовать общие переменных в многопоточных программах с++?

    Nipheris
    @Nipheris Куратор тега C++
    Ну начнем с того, что 10000 итераций на современном процессоре выполнится настолько быстро, что вероятно уложится в отведенный потоку квант времени, и второй поток скорее всего даже не успеет получить процессорное время, чтобы поменять вашу переменную. Поэтому ИСКЛЮЧИТЕЛЬНО в целях эксперимента можете попробовать увеличить число итераций хотя бы до 10 миллионов, и отключить по максимуму оптимизации (не по причине скорости, а по причине потенциального выбрасывания кода компилятором), т.к. наверняка количество итераций есть причина неудачи в вашем эксперименте.

    А если по-серьезному, вам уже дали советы как поступать - без нормальной синхронизации в многопоточной среде у вас никакие общие переменные результатов дать не могут. Если уж очень не хочется брать мьютекс (хотя чтобы его не брать, нужно четко знать что он не подходит), можете превратить вашу общий флажок в спинлок, но кодом на плюсах тут не отделаешься.

    С архитектурной точки зрения, если у вас снятие показаний, то у вас просто классический случай producer-consumer - впилите потокобезопасную очередь, и пользуйтесь.
    Ответ написан
    3 комментария
  • Какая разница в асинхронных методах?

    Nipheris
    @Nipheris Куратор тега C#
    Разница в том, что await можно использовать только в async-методе, и его использование подразумевает, что компилятор превратит метод в сопрограмму, и в том месте, где стоит await, его выполнение можно будет приостановить и переключиться на что-то еще.

    Использование Result остановит ваш поток до тех пор, пока таск не завершится и не вернет результат. Но Result можно использовать и в обыкновенном методе, не только async (в async методе его использовать абсолютно бессмысленно).

    Кроме того, использование Result влечет за собой неочевидные эффекты в виде возможности дедлоков и усложняет обработку исключений (т.к. Result всегда кидает AggreagteException, в который оборачивается исключение, брошенное внутри таска), подробнее смотрите тут stackoverflow.com/questions/24623120/await-on-a-co...

    Как первый ответ отвечает на ваш вопрос я не понимаю)
    Ответ написан
    6 комментариев
  • Как показать сообщение после завершения всех webClient.DownloadFileAsync?

    Nipheris
    @Nipheris Куратор тега C#
    Почему бы в download_completed не уменьшать счетчик оставшихся загрузок и дожидаться, пока не он станет равным нулю?
    Ответ написан
    3 комментария
  • Как сделать ожидание загрузки в C#?

    Nipheris
    @Nipheris Куратор тега C#
    1) Создали бы не новую форму, а контрол с картинкой на старой, смотрелось бы приятнее
    2) Делайте запрос асинхронно (зависит то того, чем и откуда вы загружаете), таймером проверяйте готовность, им же - анимируйте ожидание.

    Если вы не создадите второй eventloop, то вторая форма вам не поможет, т.к. цикл обработки сообщений не будет получать управление из-за синхронного кода в Windows_Loaded.
    Ответ написан
    3 комментария