运行Foreach循环Aysnc

时间:2017-04-21 15:41:32

标签: c#

我在更新Async中的产品状态时遇到小问题,所以只需要你的帮助来解决这个问题

以下是我的两种方法。一种是更新单一产品状态,另一种是更新多种产品状态。在UpdateInventoryStatusofMultipleProduct方法中,我必须致电UpdateInventoryStatusofSingleProduct来更新多个产品的状态。 要更新每个产品状态,需要一些时间。当我更新多个产品的状态时,我不想等待其他产品状态更新。我的意思是我想异步更新产品的状态

public bool UpdateInventoryStatusofSingleProduct(Product product)
{      
    result = this.inventory.UpdateProductStatus(storageLocation, state);
    Thread.Sleep(1000); //Allow the System to update status
    return result;  
}

public bool UpdateInventoryStatusofMultipleProduct(List<Product> products)
{      
    //How to change foreach loop to run asynchronously
    foreach (var product in products)
    {
       bool result = UpdateInventoryStatusofSingleProduct(product);  
    }                 
}

我正在考虑像这样实现这个,但UpdateInventoryStatusofSingleProduct应该返回任务,但方法的当前签名不会这样做。我不想更改UpdateInventoryStatusofSingleProduct的签名。

public bool UpdateInventoryStatusofMultipleProduct(List<Product> products)
{      
    var tasks = new List<Task>();

    foreach (var product in products)
    {
       tasks.Add(UpdateInventoryStatusofSingleProduct(product));  
    }                 
}

2 个答案:

答案 0 :(得分:1)

不是public bool UpdateInventoryStatusofMultipleProduct(List<Product> products) { Parallel.ForEach(products, product => UpdateInventoryStatusofSingleProduct(product)); } 你想要什么?

foreach

执行gradle.properties操作,迭代可以并行运行 https://msdn.microsoft.com/en-us/library/system.threading.tasks.parallel.foreach(v=vs.110).aspx

答案 1 :(得分:0)

正如@ mm8所说,你可以为每个人提供并行,或者如果你想使用任务,你可以通过类似的东西创建一个新任务:

foreach (var product in products)
{
   tasks.Add(Task.Factory.StartNew(() => UpdateInventoryStatusofSingleProduct(product)));  
}

await Task.WhenAll(tasks); ...