首先,我不确定我是否在问一些愚蠢的问题,所以在开始之前道歉。
我有一个方法使用 SqlCommand 异步保存数据库中的实体集合,它返回一个表示异步操作的任务,到目前为止它运行良好。基本上它会为每个实体生成一个 SQL 命令和一堆参数,并将它们全部添加到 SqlCommand 实例中(参数已编号)
但是,如果我尝试插入很多实体,当参数计数达到 2100 时,SQL 操作就会失败,因为那是限制。然后我想分批拆分实体集合,并按顺序执行它们,然后返回一个直到所有子任务都完成后才会完成的任务。(应该是最后一个)
每个子任务都会得到一个 Int32,说明有多少行发生了变化,最终任务必须返回所有行的总和。所以所有的任务都是Task。如果其中一个失败,它们都必须“回滚”,因此它们必须共享连接和事务对象。
另外,我想确保我在 Task 和 SqlCommand 中正确使用了 I/O 完成端口,并且在 SQL Server 上的操作完成时没有线程等待/旋转,因为这个“保存”操作是从 ASP.NET MVC 中的异步控制器调用。
这里的正确方法是什么?
问候。