gpt4 book ai didi

c# - 排队嵌套线程

转载 作者:太空宇宙 更新时间:2023-11-03 10:36:04 25 4
gpt4 key购买 nike

在我的程序中,一种产品(或一种成分)需要更新其父级价格,而那些父级必须为其父级做同样的事情,等等。

我写了一个这样的方法:

public static Price CalculatePrice(this IProduct pro)
{
/// calculation stuff
}

private static SystemContext innerContext;

/// <summary>
/// In the main controller this method called for updates
/// </summary>
/// <param name="pro"></param>
/// <param name="sc"></param>
public static void UpdatePrice(this IProduct pro, ref SystemContext sc)
{
if (sc.Relations.Where(t => t.SubProduct.ID == pro.ID).Any())
{

// If this returns any, this means there are some products using this product as their sub-product.
var list = sc.Relations.Where(t => t.SubProduct.ID == pro.ID).ToList();

ConcurrentQueue<Relation> quee = new ConcurrentQueue<Relation>(list);

innerContext = new SystemContext();

Task task = new Task(() => UpdatePrice(ref quee));
task.Start();
}
}


private static void UpdatePrice(ref ConcurrentQueue<Relation> queue)
{
Relation val;

while (queue.TryDequeue(out val))
{
val.Product.Price = val.Product.CalculatePrice();

var list = innerContext.Relations.Where(t => t.SubProduct.ID == val.Product.ID);

if (list.Any())
{
ConcurrentQueue<Relation> quee = new ConcurrentQueue<Relation>(list);
Task task = new Task(() => UpdatePrice(ref quee));
task.Start();

}
}
}

虽然第一级父产品得到更新,但第二级没有。

这样做有更好的逻辑吗?

顺便说一下,任何最低级别的产品都有大约 1000 个父级(递归)。这意味着耗时(因为价格的计算)。因此,如果您在提供建议时也考虑时间,那将是完美的......

编辑

当我在做一些测试的时候。我估计,一些最低级别的产品有 4000 个 parent 。

最佳答案

我认为解决方案可能是迭代地而不是递归地处理数据。您可以通过将您感兴趣的所有产品添加到列表中并在处理其中的产品时不断添加到该列表中来实现。

像这样:

public static void UpdatePrice(this IProduct pro, ref SystemContext sc)
{
var relations = sc.Relations.Where(t => t.SubProduct.ID == pro.ID).ToList();

for (int i = 0; i < relations.Count; i++)
{
relations[i].Product.Price = relations[i].Product.CalculatePrice();
relations.AddRange(sc.Relations.Where(t => t.SubProduct.ID == relations[i].Product.ID));
}
}

关于c# - 排队嵌套线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27767801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com