【发布时间】:2018-03-08 15:27:26
【问题描述】:
我已经使用 Observable.Using 与返回 IDisposable 的方法一起使用:
Observable.Using(() => new Stream(), s => DoSomething(s));
但是当流被异步创建时,我们将如何进行呢?像这样:
Observable.Using(async () => await CreateStream(), s => DoSomething(s));
async Task<Stream> CreateStream()
{
...
}
DoSomething(Stream s)
{
...
}
这不会编译,因为它说 s 是 Task<Stream> 而不是 Stream。
怎么了?
【问题讨论】:
-
做
Observable.Using(async () => await CreateStream(), s => DoSomething(s.Result));确实有效,但似乎非常错误。这是一个很好的问题。期待答案。 -
啊,你可以试试这个:
Observable.Using(async () => await CreateStream(), s => Observable.FromAsync(() => s).SelectMany(x => DoSomething(x)))? -
@Enigmativity RE:
s.Result我同意这感觉非常错误。我认为这个想法是第二个函数应该异步使用资源。你可以写Observable.Using(async (ct) => await CreateStream(), async (s, ct) => await DoSomething(s)),ct是CancellationToken,它是解决过载所必需的。非常令人困惑的 IMO。
标签: c# .net observable system.reactive