在并行执行中的同一线程上执行操作

时间:2014-07-29 15:14:13

标签: c# multithreading task-parallel-library

我有一个要求,因此我需要在并行执行流程中进行一些同步处理。

我在Parallel foreach中有一些任务。现在我需要做的是,在两者之间进行一些数据库更新。 我不想使用async和await来完成,因为这会调用多个线程并加载我的服务器。

由于这些数据库更新对我很重要,但我不希望它们阻止我的主要执行流程。 我想要实现的是数据库更新应该始终在同一个线程上同步完成,这将加快主流程。

使用任务时这可能吗?如果是这样,任何人都可以在同一时间提出建议。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你有几个并发的任务想要保存一些东西来做数据库 - 但是数据库访问必须是单线程的,而不是并发的,正确的吗?

您还不希望在将数据保存到数据库时阻止并发任务。

如果是,请使用TPL数据流ActionBlock

var actionBlock = new ActionBlock<int>(n => SaveIntToDatabase(n));

然后将你的并发任务发布到块中:

actionBlock.Post(2);       //blocking
actionBlock.SendAsync(2);  //non-blocking