Search code examples
c#taskwebapi

Method returns Task<List<Guid> instead of List<Guid> in WebAPI


Below async method returns Task<List<Guid>> instead of List<Guid>. Can anyone suggest how to return List?

public static async Task<List<Guid>> ConvertTaxRequest(Proto.GetTaxListRequest request)
{
    return await Task.Run(() =>
    {
        return new List<Guid>(request.TaxKeyList.ToList().ConvertAll(Guid.Parse));
    });
}

Solution

  • If you want to return List<Guid> without any tasks, just do it:

    public static List<Guid> ConvertTaxRequest(Proto.GetTaxListRequest request) =>
      request.TaxKeyList.Select(item => Guid.Parse(item)).ToList();
    

    and you can put

    List<Giud> myList = ConvertTaxRequest(myRequest);
    

    If you have to return Task (say for API requirement) and request...ToList() is fast enough you can construct task from the result:

    public static Task<List<Guid>> ConvertTaxRequest(Proto.GetTaxListRequest request) =>
      Task.FromResult(request.TaxKeyList.Select(item => Guid.Parse(item)).ToList());
    

    If request...ToList() is slow, then you can run it asynchronosly

    public static Task<List<Guid>> ConvertTaxRequest(Proto.GetTaxListRequest request) => 
      Task.Run(() => request.TaxKeyList.Select(item => Guid.Parse(item)).ToList());
    

    In both cases with Task you should await them

    // Since ConvertTaxRequest returns not List<Guid>, but Task<List<Guid>>
    // We should await when Task is completed
    List<Giud> myList = await ConvertTaxRequest(myRequest);