我有一个要求,因此我需要在并行执行流程中进行一些同步处理。
我在Parallel foreach中有一些任务。现在我需要做的是,在两者之间进行一些数据库更新。 我不想使用async和await来完成,因为这会调用多个线程并加载我的服务器。
由于这些数据库更新对我很重要,但我不希望它们阻止我的主要执行流程。 我想要实现的是数据库更新应该始终在同一个线程上同步完成,这将加快主流程。
使用任务时这可能吗?如果是这样,任何人都可以在同一时间提出建议。
答案 0 :(得分:1)
如果我理解正确,你有几个并发的任务想要保存一些东西来做数据库 - 但是数据库访问必须是单线程的,而不是并发的,正确的吗?
您还不希望在将数据保存到数据库时阻止并发任务。
如果是,请使用TPL数据流ActionBlock
。
var actionBlock = new ActionBlock<int>(n => SaveIntToDatabase(n));
然后将你的并发任务发布到块中:
actionBlock.Post(2); //blocking
actionBlock.SendAsync(2); //non-blocking