public Task <StarWarsCharacter[]> Friends(Droid source) { var friends = source.Friends ?? new string[0]; // Get or add a batch loader with the key "GetCharacterById" // The loader will call FetchCharacterByIdAsync for each batch of keys var loader = _accessor.Context.GetOrAddBatchLoader <string, StarWarsCharacter>("GetCharacterById", _service.FetchCharacterByIdAsync); // Add the list of friend ids to the pending keys to fetch // The task will complete once all of the FetchCharacterByIdAsync() returns with the batched results return(loader.LoadAsync(friends)); }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var obj = JObject.Load(reader); StarWarsCharacter character; if (obj.ContainsKey("homePlanet")) { character = new Human(); } else { character = new Droid(); } serializer.Populate(obj.CreateReader(), character); return(character); }
public string Description(Droid source) { return($"{source.Name} is a {source.Function} droid."); }
public string PrimaryFunction(Droid source) => source.Function;
public Task <StarWarsCharacter[]> Friends(Droid source) { var friends = source.Friends ?? new string[0]; return(Task.WhenAll(friends.Select(id => _service.FetchCharacterByIdAsync <StarWarsCharacter>(id)))); }