Mapper使用多线程?

时间:2017-03-22 15:45:15

标签: c# .net multithreading parallel-processing automapper

是否有Mapper使用多线程将一个列表映射到另一个列表?

var mappedItems = Mapper.Map<List<ItemDto>, ObservableCollection<Item>>(dtos);

显然,幕后Mapper正在逐个处理ItemDtoItem。这个操作字面上要求&#34;拜托!做我多线程!&#34;。但是我无法找到这个选项。我正在寻找类似的东西:

Parallel.ForEach(items, item =>
{
});

我找不到任何可以帮助我的东西:/

1 个答案:

答案 0 :(得分:2)

正如评论中已经说过的那样,您可能应该重新设计数据库逻辑,以便能够逐页查询数据,在服务器端或客户端使用一些过滤器。

但是,如果您仍然需要转换/转换某些数据,想要在后台执行此操作,并且能够并行化代码,则可以从TransformBlock试用TPL Dataflow,如下所示:

public class ItemDto { }
public class Item { }

var transform = new TransformBlock<ItemDto, Item>(dto => new Item(),
    // all cores can be used for processing
    new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = Environment.ProcessorCount });

var dtoList = new List<ItemDto>();
foreach (var item in dtoList)
{
    transform.Post(item);
}

如您所见,block可转换为IObservable<ItemDto>,并且可以轻松地与UI一起使用:

IObservable<Item> observable =  transform.AsObservable();