Владимир Грабко
> Просил знакомого проверить отказоустойчивость апи "реальным" ботнетом. Упало при 900к запросов одновременно
Хорошие у вас знакомые :D
И еще сделать его public. А вообще конечно лучше сделать public-метод у формы вроде SetЧтототам(string text), который можно будет дергать извне, и который будет обновлять содержимое лейбла.
Приведите еще какую-нибудь информацию. Версию студии и дотнета, какие библиотеки используются, когда конкретно вываливается исключение, что при этом происходит (передача данных по сети, чтение файла, открытие формы, и т.д.).
Therapyx
В int хранится целочисленное значение. В int* хранится указатель на ячейку с целочисленным значением.
Вы можете создать переменную типа int: int a = 19; Далее вы можете записать адрес этой переменной в переменную-указатель: int* pa = &a; Переменная a хранит целочисленное значение - 19. Переменная pa хранит АДРЕС переменной a, например 0x5BC16A. В нашем случае, если разыменовать pa, это будет то же самое, что и переменная а. Т.е., код (*pa) = 84; отработает так же, как и a = 84. Вот только что написал большой ответ: Почему при освобождении выделенной памяти для переменной адрес ячейки к ней не меняется?
Тим Попробуйте пересоздавать хост время от времени, и посмотреть, уйдет ли проблема. Это не решение, но возможно поможет локализовать. Код сможете опубликовать или не вариант?
Павел Тананыхин в stdafx.h случаем ничего не подключается? вообще есть какие-то файлы в проекте, которые вы создавали не вы или назначение которых вам не известно?
andrewjabber я иногда удивляюсь, как никто не задаетесь вопросом, за счет чего реализуются новые продукты и услуги, или старые, но на новом уровне.
Вот вспоминается например мультик Frozen, в котором над снегом столько работали, что у чуваков набралось достаточно материала, чтобы привезти на конфу SIGGRAPH. Вопрос - достаточно ли было бибилотек? Были ли библиотеки моделирования разного рода "слипающихся" материалов вроде снега? Вероятно были какие-то, но чем-то же они создателей мульта не устроили? Это мелкий пример, люди и посерьезнее зарываются в свои задачи.
Прошу обратить внимание, что я говорю не об отсутствии необходимости и желания менять контрол из другого потока, а о том, что это нельзя делать. Я предложил лишь один из вариантов того, как эту проблему избежать - передавать результаты расчетов в GUI-поток. У автора очень странный код, сложно посоветовать ему что-то конкретное. Предложенный вами InvokeRequired действительно поможет определить, нужно ли вызывать Invoke (https://msdn.microsoft.com/ru-ru/library/system.wi..., который вызовет делегат из НУЖНОГО потока. Правило, указанное мной, будет выполнено.
Oxoron другой сервис пробовали запустить и зайти с той клиентской машины? В файрволл правило-исключение добавили? Пинг с клиентской машины доходит до сервера?
ну прекрасно, вот у вас каждый await разбивает метод на фрагменты, каждый из которых будет выполняться после другого. Отличие от обыкновенного последовательного кода в том, что не нужно создавать для этого отдельный поток. Это своего рода кооперативная многозадачность.
Tsiren Naimanov И еще информация для размышления: посмотрите на ваш код с await. В случае callback-подхода, если вы с ним сталкивались, у вас скорее всего была бы возможность вызвать ReadTextAsync, указав колбек для вызова по завершении операции чтения. Это классический стиль в том же JS. И весь код, который идет ПОСЛЕ await, нужно было бы разместить внутри колбека. Await позволяет вам писать код линейно, а компилятор сам превратит часть ДО await в один таск, а все что ПОСЛЕ await - в другой таск, и прицепит второй таск как продолжение (continuation) первого. В этом вся его сила. Поэтому async-метод должен возвращать Task - так как вызов этого метода это по сути и ЕСТЬ создание таска/тасков внутри, а вам вернется (насколько мне известно) последний в цепочке продолжений.
Tsiren Naimanov в целом таски в .net это вещь, очень похожая на deferred/future в других языках. Т.е. это механизм запустить что-либо асинхронно, и иметь возможность получить потом результат этой асинхронной операции.
Tsiren Naimanov
> как вообще понимаю, async / await метод открывает поток и делает всё там, и потом возвращает в мейнзред значение и т д.
нет, async/await прежде всего работает с абстракцией таска (Task) - почитайте сначала про нее. Это такая высокоуровневая вещь, представляет собой абстрагированный блок вычислений, который может выполняться параллельно с другими вычислениями. Вовсе не обязательно запуск таска приведет к созданию нового потока - скорее всего поток возьмется из пула. Во всяком случае, при использовании async вы не можете предполагать, в каком конкретно потоке запустится таск.
Юрий Курите reference types, value types и Equals, без этого будете путаться. Если очень грубо и коротко, то все ссылочные типы сравниваются по ссылке, типы-значения - по содержимому, и все это можно переопределить с помощью метода Equals, как сделано, например, для класса String, который ссылочный, но сранивается по содержимому.