Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Observable.Generate在控制台中输出_C#_System.reactive - Fatal编程技术网

C# 如何使用Observable.Generate在控制台中输出

C# 如何使用Observable.Generate在控制台中输出,c#,system.reactive,C#,System.reactive,为什么下面的代码不产生输出 它是一个控制台应用程序,可以生成一些随机值(我正在学习被动扩展) 可观察的表示异步数据流。因为您要将时间跨度传递给生成,所以数字生成是在后台线程中进行的 当Main函数退出时,主线程退出。当主线程退出时,后台线程被终止 由于Main函数将在0.1秒之前退出,因此生成器没有时间生成任何内容。尝试添加Console.ReadLine()到主函数的末尾,因此后台线程在您按键之前不会被终止。可观察的表示异步数据流。因为您要将时间跨度传递给生成,所以数字生成是在后台线程中进行的

为什么下面的代码不产生输出

它是一个控制台应用程序,可以生成一些随机值(我正在学习被动扩展)


可观察的
表示异步数据流。因为您要将时间跨度传递给
生成
,所以数字生成是在后台线程中进行的

Main
函数退出时,主线程退出。当主线程退出时,后台线程被终止


由于
Main
函数将在0.1秒之前退出,因此生成器没有时间生成任何内容。尝试添加
Console.ReadLine()
函数的末尾,因此后台线程在您按键之前不会被终止。

可观察的
表示异步数据流。因为您要将时间跨度传递给
生成
,所以数字生成是在后台线程中进行的

Main
函数退出时,主线程退出。当主线程退出时,后台线程被终止



由于
Main
函数将在0.1秒之前退出,因此生成器没有时间生成任何内容。尝试添加
Console.ReadLine()
Main
函数的末尾,因此后台线程在您按键之前不会被终止。

可能它没有时间生成任何内容。尝试添加
Console.ReadLine()结束。@Blorgbeard它现在可以工作了。原因是什么?我不熟悉Rx,但我假设它是在后台线程上执行的。当主线程退出时,后台线程被终止。当
Main
函数结束时,主线程退出
Console.ReadLine()
等待主线程上的输入,因此在您按键之前背景线程不会被终止。@blorgty。请复制答案,这样我就可以结束这个问题。如果您将您的可观测值保存在变量中,您还可以调用
observable.Wait()
。它等待/阻塞,直到可观察的完成执行。也许它没有时间生成任何东西。尝试添加
Console.ReadLine()结束。@Blorgbeard它现在可以工作了。原因是什么?我不熟悉Rx,但我假设它是在后台线程上执行的。当主线程退出时,后台线程被终止。当
Main
函数结束时,主线程退出
Console.ReadLine()
等待主线程上的输入,因此在您按键之前背景线程不会被终止。@blorgty。请复制答案,这样我就可以结束这个问题。如果您将您的可观测值保存在变量中,您还可以调用
observable.Wait()
。它等待/阻塞,直到可观察到的完成executing.Btw。如果有人使用Rx的定时功能,则数字生成仅在后台线程中运行。如果仅使用4个参数调用Observable.Generate,则不会创建任何后台线程,程序将在主线程上以无休止的循环运行。感谢Sid,这就是为什么我不愿意发布答案的原因-我想我会错过类似的内容。
Observable
表示能够异步的发布/订阅源。与Node.js中的承诺和回调不同,
可观察的
不一定是异步的。例如:
Observable.Return
,甚至
Observable.Generate
create synchronous
Observable
s,许多Rx操作符还返回一个与它们所操作的源具有相同同步性的Observable。例如:
Select
SelectMany
Aggregate
Scan
Count
,等等。但是,这些确实包括用于指定计划程序的重载,这可能会更改操作的同步性。@Christopherris感谢您的澄清。我刚才提到过,它非常强调asynchronisity.Btw。如果有人使用Rx的定时功能,则数字生成仅在后台线程中运行。如果仅使用4个参数调用Observable.Generate,则不会创建任何后台线程,程序将在主线程上以无休止的循环运行。感谢Sid,这就是为什么我不愿意发布答案的原因-我想我会错过类似的内容。
Observable
表示能够异步的发布/订阅源。与Node.js中的承诺和回调不同,
可观察的
不一定是异步的。例如:
Observable.Return
,甚至
Observable.Generate
create synchronous
Observable
s,许多Rx操作符还返回一个与它们所操作的源具有相同同步性的Observable。例如:
Select
SelectMany
Aggregate
Scan
Count
,等等。但是,这些确实包括用于指定计划程序的重载,这可能会更改操作的同步性。@Christopherris感谢您的澄清。我曾经提到过,它非常强调异步性。
using System.Reactive.Linq;

static void Main(string[] args)
{   
    var rand = new Random();
    Observable.Generate(
        5.0,
        i => i > 0,
        i => i + rand.NextDouble() - 0.5,
        i => i,
        i => TimeSpan.FromSeconds(0.1)
    ).Subscribe(Console.WriteLine);  
}