As a part of best practices for async and await it is recommended to not use Task.Run. I have a service which makes multiple calls to a third party service and we use async to make those calls. I'm looking for advice on code improvement in the code below.
  public interface IRouteService
{
     Task<IEnumerable<Route>> GetRoute(Coordinates orign, Coordinates destination);
}
public class RouteProvider
{
    private readonly IRouteService _routeService; 
    public RouteProvider(IRouteService routeService)
    {
        _routeService = routeService;
    }
    public async Task<IEnumerable<Route>> GetRoutes(IEnumerable<Coordinates> origns, IEnumerable<Coordinates> destinations)
    {
        ConcurrentBag<Route> routes = new ConcurrentBag<Route>();
        List<Task> tasks = new List<Task>();
        foreach (var origin in origns)
        {
            foreach (var destination in destinations)
            {
                tasks.Add(Task.Run(async () =>
                {
                  var response=  await _routeService.GetRoute(origin, destination);
                    foreach (var item in response)
                    {
                        routes.Add(item);
                    }
                }));
            }
        }
        Task.WaitAll(tasks.ToArray());
        return routes;
    }
}
public class Route
{
    public string Distance { get; set; }
    public Coordinates Origin { get; set; }
    public object Destination { get; set; }
    public string OriginName { get; set; }
    public string DestinationName { get; set; }
}
public class  Coordinates
{
    public float Lat { get; set; }
    public float Long { get; set; }
}
 
     
     
    