I have method that load some character data from outer db to inner db (infoBase) that looks like some kind of list of CharacterInfo objects. The method returns observable. But if user tries to load character data that is already loaded I wish to give the data straight to user from inner db.
public IObservable<IEnumerable<CharacterInfo>> LoadCharactersOverviewAsync(CharacterInfoBase infoBase, params int[] char_id)
{
//Filter that search ids of characters that weren't load yet
IEnumerable<int> char_id_filtered = ... ;
//If list is empty than it means that all we need is already loaded
if (!char_id_filtered.Any())
{
//get list of necessary CharacterInfos from inner db
IEnumerable<CharacterInfo> result = infoBase.Where(...);
//Crunch. Don't know hot to return 1 collection as observable
return Observable.FromCoroutineValue<IEnumerable<CharacterInfo>>(()=> Result(result));
}
...
//Returns observable result
return JsonRequestExecutor.GetRequest(requestParameters)
.Select(json =>
{
...
}
);
}
So as you see I made crunch that creates observable from coroutine which I made just to return result
IEnumerator Result(IEnumerable<CharacterInfo> result)
{
yield return result;
}
Tell me please, how to make it better? P.S. Sorry for my english