在并行执行中对同一线程执行操作

本文关键字:线程 执行 操作 一线 并行执行 | 更新日期: 2023-09-27 18:15:32

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

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

因为这些数据库更新对我来说很重要,但我不希望它们阻塞我的主要执行流程。我想要实现的是,数据库更新应该总是同步地在同一个线程上完成,这将固定主线程。

当我使用任务时,这是可能的吗?

在并行执行中对同一线程执行操作

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

你也不希望并发任务在数据被保存到数据库时阻塞。

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

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

然后让你的并发任务把东西放到block中:

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