:私はこのコードを実行した場合Observable.Generateは私が期待しているほど速く生成しません。私は何が欠けていますか?以下RXコードが与えられ
static void Main(string[] args)
{
int x = 0;
const int timerMilliseconds = 1000 * 30; //30 seconds
var disposable = Observable.Generate(0, i => true, i => 1, i => 1, i => TimeSpan.FromMilliseconds(1))
.Subscribe(i => Interlocked.Increment(ref x));
var timer = new Timer(o =>
{
disposable.Dispose();
Console.WriteLine("Disposed of observable. Current total: " + x);
}, null, timerMilliseconds, timerMilliseconds);
Console.ReadKey(true);
timer.Dispose();
}
は、(私のマシンで)30秒後に出力されます〜1924年、私に優しいのは驚くべきことです。 30ミリ秒後に1ミリ秒の遅れで、その数は〜30,000に近づくはずです。それは明白なものでなければなりませんが、私はここで何が欠けていますか?
OnNextへのすべての呼び出しは直列化されているはずです...同時ではありません...したがって、Subscribe OnNextアクション内でInterlocked.Incrementを使用する必要はありません。 –
@RichardHein良い点。このサンプルを、私が作業していたコードの大部分からリッピングしました。そこでは、観察可能なストリームがいくつか同時に実行されていて、すべて同じ変数にアクセスしています。しかし、良いキャッチ。 – BFree