Skip to content

Instantly share code, notes, and snippets.

@gyuwon
Last active September 18, 2016 16:39
Show Gist options
  • Save gyuwon/77c24c4e93a785c6c413 to your computer and use it in GitHub Desktop.
Save gyuwon/77c24c4e93a785c6c413 to your computer and use it in GitHub Desktop.
IQueryable<T> to IObservable<T>
public static IObservable<T> ToObservable<T>(this IQueryable<T> source)
{
if (source == null)
throw new ArgumentNullException(nameof(source));
IDbAsyncEnumerable<T> dbAsyncSource = source as IDbAsyncEnumerable<T>;
if (dbAsyncSource == null)
return source.AsEnumerable().ToObservable();
return Observable.Create<T>(async (observer, cancellationToken) =>
{
using (var enumerator = dbAsyncSource.GetAsyncEnumerator())
{
try
{
while (await enumerator.MoveNextAsync(cancellationToken))
{
observer.OnNext(enumerator.Current);
}
observer.OnCompleted();
}
catch (TaskCanceledException)
{
}
catch (Exception error)
{
observer.OnError(error);
}
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment