我在代码中实现了一个复杂的构建器模式,类似于这个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.
});
是否有任何方法/示例可以演示类似的行为?
首先,在最近的c#中,您使用Task.Run(...)
而不是TaskFactory.StartNew(...)
来启动运行该函数的后台任务。然而,这不会使构建器并行运行,对于cpu绑定工作的并行化(我假设构建器不执行任何磁盘/网络I/O),您使用Parallel
类,Parallel.Invoke
似乎适合您的情况。
然而,当使用并行类时,你需要确保不同的构建器不会改变相同的状态,例如,不要操纵代表SQL查询的共享StringBuilder
。如果你需要改变相同的状态,你可以在需要的地方为线程安全引入锁,但是要确保并行化是合理的。