如何传入异步函数来接收函数类中的值

本文关键字:函数 何传入 异步 | 更新日期: 2023-09-27 18:05:13

我有一组函数,我想传递给另一个函数在该函数内执行。下面是我的尝试。最后一个是我试图与泛型函数一起使用的。

My controller function

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

如何传入异步函数来接收函数类中的值

async函数不能返回Data.Models.Client,只能返回Task<IData.Models.Client>Taskvoid

你应该得到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);
}