2016-08-31 2 views
2

J'ai un groupe de fonctions que je voudrais passer à une autre fonction à exécuter dans cette fonction. Voici ce que j'ai essayé. Le dernier est celui que j'essaie d'utiliser avec la fonction générique.Comment passer une fonction asynchrone pour recevoir des valeurs dans la classe de fonctions

Ma fonction de contrôleur

[HttpPost] 
public async Task<Client> CreateClient([FromBody] Client client) 
{ 
    return GetMap(client, _clientRepo.AddAsync); 
} 

fonction Mapper

public static Task<Client> GetMap(Client client, Func<Data.Models.Client, Client> func) 
{ 
    var map = Mapper.Map<Client, Data.Models.Client>(client); 
    var ret = func(map); 
    return Mapper.Map<Data.Models.Client, Client>(ret); 
} 

fonction de travail

[HttpPost] 
public async Task<Client> CreateClient([FromBody] Client client) 
{ 
    var map = Mapper.Map<Client, Data.Models.Client>(client); 
    var ret = await _clientRepo.AddAsync(map); 
    return Mapper.Map<Data.Models.Client, Client>(ret); 
} 
+1

À quoi ressemble l'autre fonction? Il semble que vous vouliez juste qu'il prenne un paramètre 'Func >'? – Lee

Répondre

0

Une fonction async ne peut pas retourner Data.Models.Client il ne peut retourner Task<IData.Models.Client>Task ou void.

vous devriez obtenir Func<Task<Data.Models.Client>, Client> comme paramètre

Si vous souhaitez cibler une implémentation et une mise en œuvre async non async je créerais deux pour votre méthode surcharges, un async un et un non-async.

public static async Task<Client> GetMap(Client client, Func<Task<Data.Models.Client>, Client> func) 
{ 
    var map = Mapper.Map<Client, Data.Models.Client>(client); 
    var ret = await func(map); 
    return Mapper.Map<Data.Models.Client, Client>(ret); 
} 

public static Task<Client> GetMap(Client client, Func<Data.Models.Client>, Client> func) 
{ 
    var map = Mapper.Map<Client, Data.Models.Client>(client); 
    var ret = func(map); 
    return Mapper.Map<Data.Models.Client, Client>(ret); 
} 
+0

Je ne suis pas sûr que 'Mapper.Map <>()' retourne une tâche, mais je suppose que c'est le cas car c'est votre type de retour – gilmishal