Перейти к содержанию

Ассинхронное обращение к серверу C#


SetAres

Рекомендуемые сообщения

Всем привет! Объясните почему в качестве примера использования API на бирже bittrex встречаются реализации с асинхронным выполнением? Например:

public static async Task<BalanceModel> GetAccountBalanceAsync(string currency)        {
            string responseStr = await HttpUtilities.GetHttpResponseAsync("https://bittrex.com/api/v1.1/account/getbalance?currency={currency}", true);
            var result = JsonConvert.DeserializeObject<JsonResultWrapper>(responseStr);
            if (!result.Success)
            {
                throw new Exception("Failed to retrieve account balance. Message: {result.Message}");
            }
            return result.Result.ToObject<BalanceModel>();
        }
 
Я для написания робота использовал синхронные методы, к примеру:
            public void GetBalances()
            {
                    var nonce = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;


                    var uri = string.Format("https://bittrex.com/api/v1.1/account/getbalances?APIKEY={0}&nonce={1}", APIKEY, nonce);
                    var hmac = new HMACSHA512(Encoding.UTF8.GetBytes(SECRETS));
                    var sign = BitConverter.ToString(hmac.ComputeHash(Encoding.UTF8.GetBytes(uri))).ToLower().Replace("-", "");


                    using (var http = new HttpClient())
                    {
                        try
                        {
                            http.DefaultRequestHeaders.Add("apisign", sign);
                            execResultGetBalances = http.GetStringAsync(uri).Result;
                        }
                        catch (Exception)
                        {
...

В  чем преимущества первого метода, используя ключевые слова async и await? Во втором случае как по мне всё удобно, т.к. выполняется всё ПОСЛЕДОВАТЕЛЬНО - отправил запрос > получил ответ > провел манипуляции с данными. В асинхронном случае же (если я правильно понимаю) есть вероятность не дождаться ответа, как прога будет уже работать с данными, которые на самом деле ещё не пришли, т.е. отправил запрос > если ответ долго идет > провел манипуляции с данными (которые не пришли) и тут вдруг приходит ответ от сервера с данными.

Ссылка на комментарий
Поделиться на другие сайты

Проблема лежит в другой плоскости. Для начала нужно понимать различие между ассинхронностью и многопоточностью. Ассинхронность - это выполнение нескольких тасков в одном(!) потоке. У IIS есть макс. количество потоков(то-ли 50 потоков на одно ядро процессора, не суть, главное что их не бесконечное количество) в которых соответственно могут выполняться таски. Так вот - в высоконагруженных приложениях может случиться так что вы забьете синхронными задачами весь пул потоков, и IIS просто перестанет принимать новые задачи. Чтобы этого не случилось и придумали ассинхронность. То о чем боитесь вы - это проблемы многопоточных задач, но не ассинхронных.

 

Т.к. у вас на сервере крутится один робот то врят-ли вы в этот лимит упретесь...нужно ли учиться писать более универсальный код? Думаю да)

Изменено пользователем Vasyaaa
Ссылка на комментарий
Поделиться на другие сайты

Как не надо писать приложения, основанные на протоколе TCP

http://profyclub.ru/docs/273

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

@SetAres, Если еще актуально: ты не прав насчет того что данные не придут. За это отвечает Await. В этом фишка, придуманная Мелкософтом. У тебя асинхронный метод, но если ты перед вызовом скажешь await, то поток выполняющий асинхронную опперацию будет дожидаться выполнения этого метода. .net компилятор сам обернет вызовы этих методов в соответствующие конструкции. 

 

Но есть огромный плюс, в момент когда приложение будет ждать окончания ассинхронной операции, ресурсы процессора освободятся и могут быть использованы для других оппераций. А в твоем примере поток будет усыплен пока данные не придут. 

 

Скажем так, врядли ты ограничишся одним запросом. Предположим тебе нужно взять среднюю цену по биржам. Ты делаешь сразу 5-6 запросов, в одном случае твой поток будет поочередно выполнять операции, в другом, он параллельно выполнит все запросы, дождется из выполнения и продолжит выполнение основного метода как буд-то это синхронная операция. 

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Similar Topics

    • ​​​​​​​Куда обращается Linux из коробки и безопасно ли это обращение для кошельков?

      Буду благодарен вашему вниманию! Хочу поставить себе на отдельный ПК надёжную сборку Linux, но у разных дистрибутивов разная своевольная сетевая активность! Чуть ранее я решил поставить сборку на свободном ПО. Сначала это была Fedora, а затем PureOS на libre-linux. Вроде всё было ок, но потом пришла идея посмотреть сетевую активность PureOS. Система периодически что-то отправляла и качала из интернет. Понятно, что это обновления. Но есть соединения непонятные. Дальше я решил проверить изв

      в Безопасность

    • обращение к моду по теме в благотворительстве

      гой еси, всяк сюда зашедший. вопрос к моду, который удалилл мою темку. в чем я там накосячил? закрепленный темы с правилами оформления не увидил. написал все как естьь.

      в Флейм

    • Дмитрий Песков: обращение криптовалюты пока разрешать нельзя

      Разрешив сегодня эмиссию и обращение криптовалюты в России, мы сильно рискуем оказаться в ситуации финансовой пирамиды МММ, заявил спецпредставитель российского президента по цифровому и технологическому развитию Дмитрий Песков.   «Мы законодательно не задавили блокчейн и криптовалюту на старте и пытаемся вывести их в нормативное поле. Но государство должно честно всех предупредить, что вероятность того, что вы попадете в МММ 2.0, здесь максимальная. Центробанк занимает предельно либер

      в Новости криптовалют

    • Сенегал введёт в обращение национальную криптовалюту

      Возможно, что западноафриканское государство Сенегал войдёт в число первых стран, которые примут к обращению национальную цифровую валюту, основанную на технологии блокчейна. Появилась информация, что электронная валюта под названием eCFA станет законным платёжным средством наряду с официальной валютой страны и региона - франком КФА, который является денежной единицей 14 африканских стран, большинство из которых – бывшие французские колонии.   Первым о создании новой валюты сообщило местное но

      в Новости криптовалют

    • Новогоднее обращение Путина 2015 ;)

      Всех с наступающим 2015 годом! Всем желаю исполнения желаний и новых побед!!! ;) С НОВЫМ ГОДОМ!!!  

      в Флейм

×
×
  • Создать...