2016-08-31 5 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

비동기 기능은 Data.Models.Client이 단지 Task<IData.Models.Client>Task 또는 void을 반환 할 수 있습니다 반환 할 수 없습니다. 당신은 비동기 구현과 나는 당신의 방법이 오버로드, 비동기 하나가 아닌 비동기 하나를 만들 것 아닌 비동기 구현을 목표로 할 경우

당신은 매개 변수로

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

관련 문제