Гусары, молчать! :-)
Прочитал вот эту статью:
http://rsdn.ru/article/dotnet/ReactiveExtensions.xml Там, в шарпе появилось модное реактивное программирование. По ходу прочтения меня мучали две мысли:
1) Архитекторов C# покусали функциональщики.
2) Блин, да все это ж было и раньше прямо в языках и в ОС, и называлось, соответственно, сопрограммами и fiber'ами. Ну и соответственно все это легко комбинацией fiber+thread делается.
Вообще, вот этот код из статьи, смотрится весьма эпично:
Func<int, int, int> add = (_x, _y) => _x + _y;
int x = 1, y = 2;
Func<int, int, IObservable<int>> obvervableAdd = add.ToAsync();
IObservable<int> result = from added in obvervableAdd(x, y)
select added;
result.Subscribe(r => Console.WriteLine(@"Observable result for function add({0}, {1}):
result = {2}, CurrentThreadId = {3}", x, y, r,
Thread.CurrentThread.ManagedThreadId));
Если кто не понял -- тут два числа складывают :-) Нет, я понимаю, что это игрушечный пример и что в реальном примере полезного (прикладного) кода в процентном отношении будет больше. Но.. Блин. Зачем так извращаться то (пачка прослоек, игрища с типами, замыкания/лямбды...)? Для императиного подхода есть сопрограммы/fiber'ы и это естественно. Для функциональных - есть лямбды с монадами, и это тоже естественно. А тут ни два ни полтора получается. Застряли по серединке.