Jump to content

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


Recommended Posts

Posted

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

Posted (edited)

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

 

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

Edited by Vasyaaa
  • 2 weeks later...
Posted

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

 

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

 

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Similar Topics

    • Банк России изменил сроки запуска цифрового рубля в обращение

      Председатель Банка России Эльвира Набиуллина сообщила о переносе сроков массового внедрения цифрового рубля — 1 июля, как было запланировано, цифровая валюта центробанка запущена в широкое обращение не будет. Набиуллина рассказала на мероприятии Ассоциации банков России, что некоторые крупные участники рынка вроде Сбера, ВТБ и Альфа-банка были обязаны предоставить своим клиентам возможность проводить операции с цифровыми рублями в июле. Однако массовое внедрение цифрового рубля произойдет

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

    • Компания Paxos запустила в обращение стейблкоин Lift Dollar с ежедневной выплатой процентов

      Компания Paxos International, филиал финтех-корпорации Paxos в Объединенных Арабских Эмиратах, представила стейблкоин Lift Dollar (USDL). Эмиссия USDL осуществляется под надзором Управления по регулированию финансовых услуг (FSRA) Глобального рынка Абу-Даби (ADGM). Lift Dollar привязан в соотношении 1:1 к долларовой стоимости краткосрочных обязательств Казначейства США. В отличие от традиционных форм инвестирования в долговые инструменты, актив предполагает своим держателям ежедневную выпл

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

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

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

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

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

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

      in Флейм

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

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

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

×
×
  • Create New...