.NET中的Reactive Extensions:如何提前取消Timeout()?

时间:2015-10-29 17:52:40

标签: c# .net system.reactive

目前我有这样的事情:

nasm -f elf file.asm
gcc -m32 -o file file.o

似乎工作正常。但是,有一个事件发生在同一个类中,我需要取消超时;它不应该等待整整10秒钟。

我该怎么做呢?

1 个答案:

答案 0 :(得分:4)

您可以这样做:

假设您在名为observable1的变量中有第一个Observable(基于WriteCompleted事件)。

为了更清楚,这里是observable1

的定义
var observable1 = Observable.FromEventPattern<WriteConfirmationEventArgs>(
    h => this.WriteCompleted += h,
    h => this.WriteCompleted -= h)
    .Select(x => x.EventArgs.Id)
    .FirstAsync(x => Guid.Equals(x, dto.Id))
    .Timeout(TimeSpan.FromSeconds(10));

创建另一个基于另一个事件的Observable,如下所示:

var observable2 = Observable.FromEventPattern<OtherEventEventArgs>(
            h => this.OtherEvent += h,
            h => this.OtherEvent -= h);

然后通过使用TakeUntil方法组合两个Observable来创建另一个Observable:

var new_observable = observable1.TakeUntil(observable2);

然后订阅这个新的Observable而不是observable1