S>Давайте весь код, чтобы сразу запустить. Я дал весь, на форму только кинуть 2 TextBox.
Давайте тогда ваш пример на GitHub, чтобы и ваш запустить, туда и код с Rx можно добавить будет для сравнения
Здравствуйте, _NN_, Вы писали:
S>>Давайте весь код, чтобы сразу запустить. Я дал весь, на форму только кинуть 2 TextBox. _NN>Давайте тогда ваш пример на GitHub, чтобы и ваш запустить, туда и код с Rx можно добавить будет для сравнения
А что на Rx получается такой большой код, что нужен GitHub?
Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, okon, Вы писали:
O>>
O>>inputObservable
O>> .Throttle(500)
O>> .CombineLatest(input => GetList(input))
O>> .OnNext( result => texbBox.text = result );
O>>
O>>Ну и по событию кидать в inputObservable новые данные
S>Давайте весь код, чтобы сразу запустить. Я дал весь, на форму только кинуть 2 TextBox.
S>И добавьте textBox2.Clear(); после задержки в 500 мс.
Сори, но мне лично лень делать под тебя отдельный проект и проверять компиляцию.
Я показал как выглядит решение на Rx, если тебя прям весь код интересует то могу написать примерно с точностью до типов, а дальше сам ковыряй.
Те количество строк не должно измениться в решении , это все решение :
Observable<string[]> inputObservable = new Observable<string[]>();
// любое место где инициализация формыvoid Init()
{
inputObservable
.Throttle(500)
.CombineLatest(input => GetList(input))
.Subscribe( result => texbBox.text = result );
}
void KeyDown(EventArgs e) => inputObservable.OnNext(e);
Вот это твой эквивалент этой же логики
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);
}
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, _NN_, Вы писали:
S>>>Давайте весь код, чтобы сразу запустить. Я дал весь, на форму только кинуть 2 TextBox. _NN>>Давайте тогда ваш пример на GitHub, чтобы и ваш запустить, туда и код с Rx можно добавить будет для сравнения
S>А что на Rx получается такой большой код, что нужен GitHub?
Чтобы избежать недопониманий.
Я точно также не могу взять ваш код и скомпилировать, нужен код всего проекта.
Здравствуйте, _NN_, Вы писали:
_NN>Я точно также не могу взять ваш код и скомпилировать, нужен код всего проекта.
так код с Rx не воспроизводит всех возможностей первого кода...потому просто не конкурент и 1-е решение лучше и гибче.
в частности если послан запрос, 500 мс прошло, еще ввод, ответ (5сек) еще не пришел ... пошлетcя еще запрос не дождавшись предыдущего ответа?
Здравствуйте, paradoks, Вы писали:
P>Здравствуйте, _NN_, Вы писали:
_NN>>Я точно также не могу взять ваш код и скомпилировать, нужен код всего проекта.
P>так код с Rx не воспроизводит всех возможностей первого кода...потому просто не конкурент и 1-е решение лучше и гибче.
Почему ? Как раз воспроизводит без лишнего кода.
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Здравствуйте, okon, Вы писали:
O>Здравствуйте, paradoks, Вы писали:
P>>Здравствуйте, _NN_, Вы писали:
_NN>>>Я точно также не могу взять ваш код и скомпилировать, нужен код всего проекта.
P>>так код с Rx не воспроизводит всех возможностей первого кода...потому просто не конкурент и 1-е решение лучше и гибче.
O>Почему ? Как раз воспроизводит без лишнего кода.
O>>Почему ? Как раз воспроизводит без лишнего кода.
P>а где второй таймаут на 5 сек?
А что за таймаут на 5 сек ?
Покажи часть кода и выдели где это.
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, okon, Вы писали:
O>>Вот это твой эквивалент этой же логики
S>А где:
S>
S>textBox2.Clear();
S>
S>?
Добавь строчку
...
.Throttle(500)
.Subscribe( input => textBox2.Clear() )
.CombineLatest( input => GetList(input))
.Subscribe( result => textBox2.text = result );
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
O>>>Почему ? Как раз воспроизводит без лишнего кода.
P>>а где второй таймаут на 5 сек?
O>А что за таймаут на 5 сек ?
O>Покажи часть кода и выдели где это.
врем ожидания ответа 0.1 — 5 сек
значит поле 5 сек надо что-то сделать. убить запрос и тд.
Здравствуйте, paradoks, Вы писали:
P>Здравствуйте, okon, Вы писали:
O>>>>Почему ? Как раз воспроизводит без лишнего кода.
P>>>а где второй таймаут на 5 сек?
O>>А что за таймаут на 5 сек ?
O>>Покажи часть кода и выдели где это.
P>врем ожидания ответа 0.1 — 5 сек P>значит поле 5 сек надо что-то сделать. убить запрос и тд.
А где в решении без Rx убивается запрос и т.д. ? не вижу.
В Rx там достаточно просто делается , добавляется .Timeout(TimeSpan.FromMilliseconds(1000))
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, okon, Вы писали:
O>>
O>> Observable<string[]> inputObservable = new Observable<string[]>();
O>> // любое место где инициализация формы
O>> void Init()
O>> {
O>> inputObservable
O>> .Throttle(500)
O>> .CombineLatest(input => GetList(input))
O>> .Subscribe( result => texbBox.text = result );
O>> }
O>> void KeyDown(EventArgs e) => inputObservable.OnNext(e);
O>>
O>>Вот это твой эквивалент этой же логики
S>А теперь вопрос: с чего вы взяли, что ваш код проще? Лишь потому что он записан в одну очень очень длинную строку?
Намного проще, точнее логику описываешь в одном месте, а не балуешься с флажками и сложными условиями.
Сложность здесь в том что надо перевернуть мозги. Например всех тонкостей я так и не познал.
Из минусов что я нашел — если где-то в звене, какой-то подписчик бросит исключение, то вся цепь отвалится.
Здравствуйте, Danchik, Вы писали:
D>Намного проще, точнее логику описываешь в одном месте, а не балуешься с флажками и сложными условиями.
Нет, не проще. Давайте полный код, мне лень писать, т.к. мысль об Observable вызывает у меня боль.
Для Task-ов я написал.
D>Сложность здесь в том что надо перевернуть мозги. Например всех тонкостей я так и не познал.
Обман. Я работал с ними в 2012 году где-то месяца 3 довольно плотно и познал все тонкости. Но потом, когда необходимость такая отпала — вздохнул с облегчением и почти все забыл, вспоминать желания не возникает.
D>Из минусов что я нашел — если где-то в звене, какой-то подписчик бросит исключение, то вся цепь отвалится.
Там много минусов по этому никто не осмеливается привести полный код. Вот тот что привели:
Observable<string[]> inputObservable = new Observable<string[]>();
Здравствуйте, Danchik, Вы писали:
D>Не претендую на супер знание Rx. Но родил такое: D>Заумно как на меня, разве что каждый день такое рожать.
Ага. Запустите анализатор кода VS — и получите, что с Rx 55 строк кода против 43 с Tasks. Т.е. строк кода получилось больше.
В чем же обещанная простота?
Многое не очевидно. Вот эта строчка, к примеру, зачем нужна:
.ObserveOn(textBox2)
Без нее все работает. Типа метод Invoke вызывает?
Короче говоря, эта штука для тех, у кого низкая самооценка и кто хочет как-то укрепиться за счет того, что типа использует что-то диковинное, что якобы не каждому под силу. На самом деле особо сложнго ничего нет — просто не удобно.
Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, Danchik, Вы писали:
D>>Не претендую на супер знание Rx. Но родил такое: D>>Заумно как на меня, разве что каждый день такое рожать.
S>Ага. Запустите анализатор кода VS — и получите, что с Rx 55 строк кода против 43 с Tasks. Т.е. строк кода получилось больше.
S>В чем же обещанная простота?
Вы простоту а количествах строк меняете ?
По этой логике Go супер сложный язык .
S>Многое не очевидно. Вот эта строчка, к примеру, зачем нужна:
S>
S>.ObserveOn(textBox2)
S>
Чтобы контекст вызова был на UI потоке
Когда нужно обрабаьваать реактивный поток данных удобно, что есть LINQ методы, и можно описать код декларативно.
Скажем, в вашем примере есть ещё счётчик ,который по хорошему следует инкапсулировать во вспомогательный класс, иначе логика обработки и обвязка размазываются .