我在更新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));
}
}
答案 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); ...