【发布时间】:2021-08-17 09:55:45
【问题描述】:
我想知道为什么我的Observable 在我不等待它的来源(即IAsyncEnumerable)时不会产生任何元素。我在Observable 上使用Select,但没有任何结果,我的代码没有执行。
public async IAsyncEnumerable<int> GetAsyncEnumerable()
{
int i=0;
while(true)
{
await Task.Delay(1000);
yield return i++;
}
}
public async Task Run()
{
IAsyncEnumerable<int> enumerable=GetAsyncEnumerable().ToObservable();
await foreach(var elem in enumerable)
{
Console.WriteLine(elem);
}
}
在上面的例子中,代码工作并被调用,而下面没有任何输出。
public async Task RunObs()
{
IAsyncEnumerable<int> enumerable=GetAsyncEnumerable().ToObservable();
IObservable<int> inputObs = enumerable.ToObservable();
var outputObs = inputObs
.Select(elem=>
{
Console.WriteLine(elem); //does not execute
return elem;
});
}
我是否需要在某处存储对这个 observable 的引用,或者应该如何做到这一点?
【问题讨论】:
-
能否为您的
Run方法提供一个minimal reproducible example? -
我已经编辑过了。基本上在
Select中运行的带有可观察对象的代码不会被执行。 -
你的代码给了我这个错误,在
Run()的第一行:Error CS0266 Cannot implicitly convert type 'System.IObservable<int>' to 'System.Collections.Generic.IAsyncEnumerable<int>'. An explicit conversion exists (are you missing a cast?) -
你从哪里得到
.ToObservable()? -
我从包裹
System.Linq.Async得到它
标签: .net-core scope system.reactive iasyncenumerable