Я играю с Rx в .Net3.5SP1 и пробовал 101 Rx Samples. Я пытаюсь выполнить первый пример (Start - Run Code Asynchronously), но он, похоже, не работает асинхронно. Например,Rx в .Net 3.5 не асинхронный?
Console.WriteLine("[Creating]");
var o = Observable.Start(() =>
{
Console.WriteLine("Calculating...");
Thread.Sleep(3000);
Console.WriteLine("Done.");
});
Console.WriteLine("[Created]");
Console.WriteLine("[Starting]");
o.First(); // subscribe and wait for completion of background operation
Console.WriteLine("[Started]");
Выходы
[Creating]
[Created]
[Starting]
Calculating...
<...3 Second Wait...>
Done.
[Started]
Есть ли объяснение этому? Я делаю что-то неправильно? Это ожидаемое поведение?
UPDATE
я бы подумал, что сказал бы
[Creating]
[Created]
[Starting]
Calculating...
[Started]
<...3 Second Wait...>
Done.
Но основной поток блокируется, а якобы асинхронная вызов происходит.
Нет, это не проблема ... проблема есть последовательность событий. Я бы подумал, что сказал бы [Создание] [Created] [Начальная] Расчет ... [Started] <... 3 секундной паузой ...> Готово. Но основной поток блокируется, пока происходит якобы вызов Asynch ... –
@kouPhax: Метод First() должен * возвращать * значение, хотя, не так ли? (По общему признанию, значение в этом случае просто «Unit», но все же ...) Это означает, что он не может завершить до * после завершения вычисления. В принципе, вычисление * * происходит асинхронно, но вызов First() ждет его завершения. В комментарии явно говорится, что: // подписка и ожидание завершения фоновой операции –
Ha! Предположим, я должен научиться читать! благодаря –