首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加Observable.TakeUntil(任务任务)扩展方法是个坏主意吗?

添加Observable.TakeUntil(任务任务)扩展方法是个坏主意吗?
EN

Stack Overflow用户
提问于 2012-11-19 14:16:32
回答 1查看 277关注 0票数 1

我在VB.NET中有以下代码,它读取激光的测量值,直到工件旋转480度。总而言之,CTP和RX结合在一起是一个非常好的应用。

代码语言:javascript
复制
Dim measurementsList = Await machine.
    Measurements.
    TakeUntil(machine.Driver.RotateC(480, 10).ToObservable()).
    ToList()

注在这种情况下,machine.Measurements是IObservable(双精度),并且是来自网络上的激光测量设备的读数。

但是,我正在考虑向IObserverable (现在的C#代码)添加一个扩展方法。

代码语言:javascript
复制
public static IObservable<T> TakeUntil<T,R>(this IObservable<T> This, Task<R> other){
    return This.TakeUntil(other.ToObservable());
}

这真的没什么大不了的,可以让我把代码写成

代码语言:javascript
复制
Dim measurementsList = Await machine.
    Measurements.
    TakeUntil(machine.Driver.RotateC(480, 10)).
    ToList()

这看起来更流利,但考虑到RX没有提供如此明显的重载可能,我错过了这样的重载是一个坏主意的明显原因。我应该添加这个,还是坚持使用显式转换?

(顺便说一句,标签async-ctp和async-await不能合并)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-19 22:36:27

你所做的没有错,但我要回顾一下Rx v2.0 and .NET 4.5 “async” / “await” – a better together story,来自Bart De Smet的一篇冗长而内容丰富的帖子。

您可能还想查看一下Linq-to-Await,看看那里是如何做事情的。事实上,如果你看看这几个运算符,你会发现你的方法非常相似,除了在你的例子中你只接受了一个任务,在Paul Betts Linq-To-Await中,他使用了Func<T, Task<R>>。在这种情况下,您的代码可能如下所示(使用不带参数的Func ):

代码语言:javascript
复制
public static IObservable<T> TakeUntil<T,R>(this IObservable<T> This, Func<Task<R>> other){
    return This.TakeUntil(other().ToObservable());
}

      var q = Measurements.TakeUntil(async () => await machine.Driver.RotateC(480, 10));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13448592

复制
相关文章

相似问题

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