2016-08-31 6 views
2

私は、その関数内で実行する別の関数に渡したい機能のグループを持っています。 以下は私が試みたものです。最後のものは、汎用関数で使用しようとしているものです。関数クラス内で値を受け取るために非同期関数を渡す方法

私のコントローラ機能

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

マッパー機能

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); 
} 

作業する機能

[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

他の機能はどのように見えますか? 'Func >'パラメータを取ってもらいたいのではないでしょうか? – Lee

答えて

0

非同期機能はそれだけでTask<IData.Models.Client>Taskまたはvoidを返すことができData.Models.Clientを返すことができません。

あなたは非同期実装と非非同期実装をターゲットにしたい場合は、私はあなたの方法のための2つのオーバーロード、非同期1および非非同期1を作成し、パラメータ

としてFunc<Task<Data.Models.Client>, Client>を取得する必要があります。

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

'Mapper.Map <>()'がタスクを返すかどうかはわかりませんが、あなたの戻り値の型なので、私は仮定しています – gilmishal

関連する問題