Сообщение Re[7]: Reactive Extensions от 24.11.2019 15:16
Изменено 24.11.2019 16:07 Shmj
Re[7]: Reactive Extensions
Здравствуйте, Somescout, Вы писали:
S>У вас после нажатия на клавишу сразу без ожидания будет вызвана функция FillItems, которая сразу же сбросит этот флаг.
Ваша правда. Без счетчика запросов не обойтись:
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, которая сразу же сбросит этот флаг.
Ваша правда. Без счетчика запросов не обойтись:
Теперь ваш вариант на Reactive Extensions.
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.