[RX.NET] Странности с ForkJoin
От: Константин Л. Франция  
Дата: 08.10.10 10:04
Оценка:
При пустой цепочке IObservable ForkJoin зависает навсегда:


void Test()
{
   var list = Observable.ForkJoin(new string[] { null, null }.Where(s => s != null).Select(s => Observable.Start(() => Check(s))));
   var ok = list.First().All(v => v);
}

bool Check(string s)
{
   return s != null;
}
rx.net rx forkjoin
Re: [RX.NET] Странности с ForkJoin
От: Пельмешко Россия blog
Дата: 08.10.10 10:21
Оценка: 19 (2) +1
Здравствуйте, Константин Л., Вы писали:

КЛ>При пустой цепочке IObservable ForkJoin зависает навсегда:


КЛ>

КЛ>void Test()
КЛ>{
КЛ>   var list = Observable.ForkJoin(new string[] { null, null }.Where(s => s != null).Select(s => Observable.Start(() => Check(s))));
КЛ>   var ok = list.First().All(v => v);
КЛ>}

КЛ>bool Check(string s)
КЛ>{
КЛ>   return s != null;
КЛ>}

КЛ>


Это не ForkJoin зависает, он тупо возвращает бесконечную пустую последовательность, так как на вход после Where() ему была подана пустая последовательность...
Зависает First(), синхронно ожидая первый элемент последовательности list...

Есть мнение, что это некорректный behavior оператора FormJoin (имхо логичнее ему было вернуть OnCompleted), я бы отписал на Rx Forum.

Re[2]: [RX.NET] Странности с ForkJoin
От: Константин Л. Франция  
Дата: 08.10.10 11:00
Оценка:
Здравствуйте, Пельмешко, Вы писали:

[]

П>Это не ForkJoin зависает, он тупо возвращает бесконечную пустую последовательность, так как на вход после Where() ему была подана пустая последовательность...

П>Зависает First(), синхронно ожидая первый элемент последовательности list...

П>Есть мнение, что это некорректный behavior оператора FormJoin (имхо логичнее ему было вернуть OnCompleted), я бы отписал на Rx Forum.


П>


по идее First() должен кидать исключение при пустой входящей последовательности в ForkJoin, форкать то нечего
Re[3]: [RX.NET] Странности с ForkJoin
От: Пельмешко Россия blog
Дата: 08.10.10 12:10
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>Здравствуйте, Пельмешко, Вы писали:


КЛ>[]


П>>Это не ForkJoin зависает, он тупо возвращает бесконечную пустую последовательность, так как на вход после Where() ему была подана пустая последовательность...

П>>Зависает First(), синхронно ожидая первый элемент последовательности list...

П>>Есть мнение, что это некорректный behavior оператора FormJoin (имхо логичнее ему было вернуть OnCompleted), я бы отписал на Rx Forum.


П>>


КЛ>по идее First() должен кидать исключение при пустой входящей последовательности в ForkJoin, форкать то нечего


Она не просто пустая, она бесконечная, как Observable.Never<T>(), поэтому с First() всё ок.
Тут ForkJoin() должен либо исключение бросать, либо пустую последовательность (один OnCompleted) возвращать.
Re[4]: [RX.NET] Странности с ForkJoin
От: Константин Л. Франция  
Дата: 08.10.10 13:30
Оценка:
Здравствуйте, Пельмешко, Вы писали:

П>Здравствуйте, Константин Л., Вы писали:


КЛ>>Здравствуйте, Пельмешко, Вы писали:


КЛ>>[]


П>>>Это не ForkJoin зависает, он тупо возвращает бесконечную пустую последовательность, так как на вход после Where() ему была подана пустая последовательность...

П>>>Зависает First(), синхронно ожидая первый элемент последовательности list...

П>>>Есть мнение, что это некорректный behavior оператора FormJoin (имхо логичнее ему было вернуть OnCompleted), я бы отписал на Rx Forum.


П>>>


КЛ>>по идее First() должен кидать исключение при пустой входящей последовательности в ForkJoin, форкать то нечего


П>Она не просто пустая, она бесконечная, как Observable.Never<T>(), поэтому с First() всё ок.


эээ, откуда она бесконечная? Where дает пустую последовательность

П>Тут ForkJoin() должен либо исключение бросать, либо пустую последовательность (один OnCompleted) возвращать.
Re[5]: [RX.NET] Странности с ForkJoin
От: Пельмешко Россия blog
Дата: 08.10.10 13:36
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>эээ, откуда она бесконечная? Where дает пустую последовательность


А вот ForkJoin() возвращает бесконечную.
Re[6]: [RX.NET] Странности с ForkJoin
От: Константин Л. Франция  
Дата: 08.10.10 13:43
Оценка:
Здравствуйте, Пельмешко, Вы писали:

П>Здравствуйте, Константин Л., Вы писали:


КЛ>>эээ, откуда она бесконечная? Where дает пустую последовательность


П>А вот ForkJoin() возвращает бесконечную.


вот-вот, имхо, неверное поведение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.