首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否将`IObservable<T>`转换为`IEnumerable<Task<T>>`?

是否将`IObservable<T>`转换为`IEnumerable<Task<T>>`?
EN

Stack Overflow用户
提问于 2019-12-29 17:47:59
回答 2查看 231关注 0票数 1

我有几个异步API,它们使用回调或事件而不是async。我成功地使用TaskCompletionSource对它们进行了as described here包装。

现在,我想使用一个返回IObservable<T>并产生多个对象的接口。我读到了关于.NET的Rx,这似乎是一条可行的道路。然而,我在犹豫是否要包含另一个依赖项和另一个新的范式,因为我已经在这个应用程序中使用了很多对我来说都很新的东西(比如XAML、MVVM、C#的async/await)。

有没有类似于包装单个回调IObservable<T>的方法来包装API?我想这样调用API:

代码语言:javascript
运行
复制
foreach (var t in GetMultipleInstancesAsync()) {
    var res = await t;
    Console.WriteLine("Received item:", res);
}
EN

Stack Overflow用户

发布于 2019-12-29 18:14:33

如果你想使用Rx,那么你可以使用你的返回列表:

代码语言:javascript
运行
复制
GetMultipleInstancesAsync().ToObservable().Subscribe(...);

您可以订阅OnCompleted/OnError处理程序。

你也可以把它包装成一个任务列表:

代码语言:javascript
运行
复制
var result = await Task.WhenAll(GetMultipleInstancesAsync().ToArray());

所以你得到了一个结果数组,你就完成了。

票数 -1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59518323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档