我在代码中实现了一个复杂的构建器模式,类似于this URL中的最后一个模式。构建器的目的是基于对象属性构造SQL查询。
就像这样
PersonQueryBuilder person =
new PersonQueryBuilder.Builder()
.BuildAddressClause(request.PersonInformation.Address)
.BuildBankAccountClause(request.PersonInformation.BankAccountInformation)
.BuildAClause(request.Something)
.BuildBClause(request.Something)
.build();我在想,与其顺序执行这些构建器逻辑,不如用以下命令运行它们会更高效
TaskFactory.StartNew(() =>
{
// Create builder here so that the builder pattern stays the same, but the process runs concurrently.
});有没有什么方法/例子可以演示类似的行为?
发布于 2021-09-02 12:09:40
首先,在最近的C#中,您使用Task.Run(...)而不是TaskFactory.StartNew(...)来启动运行该函数的后台任务。然而,这不会让构建器并行运行,对于CPU受限工作的并行化(我假设构建器不执行任何磁盘/网络I/O),您可以使用Parallel类,Parallel.Invoke似乎适合您的情况。
然而,当使用并行类时,你需要确保不同的构建器不会改变相同的状态,例如,不要操作代表SQL查询的共享StringBuilder。如果你需要改变相同的状态,你可以在需要线程安全的地方引入锁,但是要确保并行化确实是合理的。
https://stackoverflow.com/questions/69029923
复制相似问题