【问题标题】:List<> does not contain the definiton for getAwaiterList<> 不包含 getAwaiter 的定义
【发布时间】:2017-11-20 22:32:42
【问题描述】:

我正在我的 asp.net webapi 项目中实现自动映射器。我还在业务层实现了异步任务。我基本上想返回 MoviesDto 对象而不是 Movie 实体,但得到一个错误列表不包含 getAwaiter 的定义。错误在行

return await _mapper.Map<List<MoviesDto>>(movies);

不确定是什么问题。下面是我的代码

MoviesDto

public class MoviesDto : BaseDto
    {
        public int MovieID { get; set; }
        public string Title { get; set; }
        public int? ReleaseYear { get; set; }
        public string Plot { get; set; }
        public int? MovieLength { get; set; }
    }

业务访问层

public class MovieBusiness: IMovieBusiness
    {
        IMovieService _movieService;
        IMapper _mapper;

        public MovieBusiness(IMovieService movieService, IMapper mapper)
        {
            _movieService = movieService;
            _mapper = mapper;
        }

        public async Task<IEnumerable<MoviesDto>> GetAllMovies()
        {

            var movies = _movieService.GetMovies();
            return await _mapper.Map<List<MoviesDto>>(movies);
        }

    }   

【问题讨论】:

  • Map() 方法标记为async 是没有意义的,因为它不涉及I/O 并且不可能阻塞。 _movieService.GetMovies() 最好是 async,应该是 awaited。

标签: asp.net-mvc asp.net-web-api asp.net-mvc-5 automapper


【解决方案1】:

方法_mapper.Map()不是异步的,所以你不必await它。

只需使用return _mapper.Map&lt;List&lt;MoviesDto&gt;&gt;(movies);

【讨论】:

  • 它不会编译,因为方法签名必然返回Task&lt;IEnumerable&lt;MoviesDto&gt;&gt;
  • 所以你的意思是我不能使用带有异步方法的自动映射器
  • @Tom 你可以。只需返回_mapper.Map(它将被编译)或使用Task.FromResult
  • 很抱歉没有找到你。如果我只返回 _Mapper.Map 它不起作用,因为它的方法是异步类型并且期望等待。你能给我一个Task.FromResult的例子吗
猜你喜欢
  • 2017-04-08
  • 2023-01-09
  • 1970-01-01
  • 2012-08-04
  • 2017-04-20
  • 2018-08-21
  • 2016-12-15
  • 1970-01-01
  • 2020-08-21
相关资源
最近更新 更多