Estoy jugando con Rx en .Net3.5SP1 y probando el 101 Rx Samples. Estoy probando el primer ejemplo (Inicio - Ejecutar código de forma asíncrona) pero parece que realmente no se ejecuta de forma asíncrona. Por ejemplo,Rx en .Net 3.5 no asincrónico?
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]");
salidas
[Creating]
[Created]
[Starting]
Calculating...
<...3 Second Wait...>
Done.
[Started]
¿Existe una explicación para esto? ¿Estoy haciendo algo mal? ¿Es este comportamiento esperado?
ACTUALIZACIÓN
yo habría pensado que habría dicho
[Creating]
[Created]
[Starting]
Calculating...
[Started]
<...3 Second Wait...>
Done.
Pero el hilo principal está bloqueada mientras la llamada supuestamente Asynch sucede.
Sin ese no es el problema ... el tema es la secuencia de eventos. Yo hubiera pensado que habría dicho [Crear] [Creado] [Arranque] Calculando ... [Iniciado] <3 ... En segundo lugar, espere ...> Listo. Pero el hilo principal está bloqueado mientras ocurre la supuesta llamada Asynch ... –
@kouPhax: El método First() tiene que * devolver * el valor, ¿no? (Es cierto que el valor es simplemente 'Unidad 'en este caso, pero aún así ...) Esto significa que no puede completarse hasta * después * de que el cálculo haya finalizado. Básicamente, el cálculo * está * pasando de forma asíncrona, pero la llamada Primera() espera a que se complete. El comentario dice explícitamente que: "// suscribirse y esperar la finalización de la operación de fondo" –
¡Ja! ¡Supongamos que aprenda a leer! Gracias –