Информация об изменениях

Сообщение Re[7]: Reactive Extensions от 24.11.2019 15:16

Изменено 24.11.2019 16:07 Shmj

Re[7]: Reactive Extensions
Здравствуйте, Somescout, Вы писали:

S>У вас после нажатия на клавишу сразу без ожидания будет вызвана функция FillItems, которая сразу же сбросит этот флаг.


Ваша правда. Без счетчика запросов не обойтись:

        private volatile int _lastRequestId;

        private void textBox1_KeyUp(object sender, KeyEventArgs e)
        {
            _lastRequestId++;
            FillItems();
        }

        private async void FillItems()
        {
            var requestId = _lastRequestId;

            await Task.Delay(500);

            if (requestId != _lastRequestId)
                return;

            textBox2.Clear();

            var items = await MakeRequest(textBox1.Text);

            if (_lastRequestId != requestId)
                return;

            textBox2.Text = string.Join("\r\n", items);
        }

        Random _random = new Random();
        private async Task<List<string>> MakeRequest(string q)
        {
            await Task.Delay(_random.Next(100, 5000));
            return await Task.FromResult(new List<string>()
            {
                q + " пункт 1 ",
                q + " пункт 2",
                q + " пункт 3",
            });
        }
Re[7]: Reactive Extensions
Здравствуйте, Somescout, Вы писали:

S>У вас после нажатия на клавишу сразу без ожидания будет вызвана функция FillItems, которая сразу же сбросит этот флаг.


Ваша правда. Без счетчика запросов не обойтись:

        private volatile int _lastRequestId;

        private void textBox1_KeyUp(object sender, KeyEventArgs e)
        {
            _lastRequestId++;
            FillItems();
        }

        private async void FillItems()
        {
            var requestId = _lastRequestId;

            await Task.Delay(500);

            if (requestId != _lastRequestId)
                return;

            textBox2.Clear();

            var items = await MakeRequest(textBox1.Text);

            if (_lastRequestId != requestId)
                return;

            textBox2.Text = string.Join("\r\n", items);
        }

        Random _random = new Random();
        private async Task<List<string>> MakeRequest(string q)
        {
            await Task.Delay(_random.Next(100, 5000));
            return await Task.FromResult(new List<string>()
            {
                q + " пункт 1 ",
                q + " пункт 2",
                q + " пункт 3",
            });
        }


Теперь ваш вариант на Reactive Extensions.