gpt4 book ai didi

c# - 使用 C# 7.0 的新 TaskLike 异步支持是否可以编写 IObservable 生成器

转载 作者:太空狗 更新时间:2023-10-29 23:49:38 24 4
gpt4 key购买 nike

C#7 已经出来了,我看到他们已经开放了 async await 关键字来允许你想要的任何东西。然而 API 的表面积似乎是 very large我不确定这些限制。

具体来说,如果可能的话,我很感兴趣

int RandomNumber(){..}

public async IObservable<int> Generate(){
while(true){
await Observable.Timer(TimeSpan.FromSeconds(1)).Select(_=>RandomNumber());

await Observable.Timer(TimeSpan.FromSeconds(2)).Select(_=>10);
}
}

我认为相当于

public IObservable<int> Generate(){
return Observable.Timer(TimeSpan.FromSeconds(1)).Select(_=>RandomNumber())
.Concat(Observable.Timer(TimeSpan.FromSeconds(2)).Select(_=>10))
.Replay();

}

Reddit from a while 上有一个链接之前讨论了为什么 async await 可以像 f# 计算表达式一样强大,如果允许的话。

最佳答案

我猜不会(暂时):

编译器必须以某种方式将您的代码拼接成一个具体的类型来构造和返回。 IObservable<T>不是类型,因此编译器无法构造它。

此外,从 7.0 Release Notes :

The new language feature means that async methods may return other types in addition to Task, Task and void. The returned type must still satisfy the async pattern, meaning a GetAwaiter method must be accessible.

这并不是说有人无法构建 ObservableTask<T>或者可以实现 IObservable<T> 的东西并满足任务 API 的要求。它只是还没有完成(还)。

您仍然会遇到不匹配的问题:Task<T>围绕返回 0-1 T 展开对象,IObservable<T>返回 0-n T对象。

关于c# - 使用 C# 7.0 的新 TaskLike 异步支持是否可以编写 IObservable<T> 生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42674076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com