任务工厂返回结果丢失扩展方法

时间:2014-02-25 14:23:38

标签: c# .net asynchronous task extension-methods

我有以下情况:

  List<Product> productsA = _productRepository.GetProductsA().ToList();
  List<Product> productsB = _productRepository.GetProductsB().ToList();

我有一个使用两个集合的扩展方法:

  productsA.CompareBeta<Produto>(productsB, new List<string> { "Cod" }, "Key");

好吧,它完美无缺。 但我想使用任务工厂更改这些存储库方法。

  var productsA = Task.Factory.StartNew(() => _productRepository.GetProductsA());
  var productsB = Task.Factory.StartNew(() => _productRepository.GetProductsB().ToList());
  Task.WaitAll(produtosTotvs, produtosLive);

也有效。但现在我无法获得我的扩展方法。有可能吗?

2 个答案:

答案 0 :(得分:0)

尝试

var productA = Task.Factory.StartNew<IEnumerable<Product>>(() => _productRepository.GetProductsA());
var productB = Task.Factory.StartNew<IEnumerable<Product>>(() => _productRepository.GetProductsB());
Task.WaitAll(produtosTotvs, produtosLive);

productsA.Result.CompareBeta<Produto>(productsB.Result, new List<string> { "Cod" }, "Key");

但这是异步的糟糕实现!

尝试将其全部替换为等待异步模式。

答案 1 :(得分:0)

您应该尝试通过任务的结果访问扩展方法:

productsA.Result.CompareBeta<Produto>(productsB.Result, new List<string> { "Cod" }, "Key");

详细了解Task Result