tsql - 异步 SQL 过程执行集并等待完成
问题描述
假设我对要运行的过程有大量调用,这些调用具有不同的参数但相互独立,因此我想进行并行/异步调用。我使用服务代理来触发这些,但我遇到的问题是我想知道如何等待它们全部完成(或错误)的巧妙方法。
有没有办法做到这一点?我相信我可以循环等待结果表检查是否完成,但这不是很“事件触发”。希望有更好的方法来做到这一点。
我已经使用了带有队列代码的服务代理,并根据这个其他答案进行处理:Remus' service broker queueing example
解决方案
好日子希夫,
您可以使用多种方法(与往常一样)来实现此要求。其中之一是使用这个逻辑:
(1) 创建两个队列:一个是触发器,用于执行您要异步执行的主 SP,另一个是触发器,在所有执行结束后执行您要执行的任何内容。
(2) 当您在第一个队列中创建消息时,您还应该在第二个队列中创建一个消息,它只会告诉我们哪个执行尚未结束(第一个队列提供自从我们开始执行后开始执行的信息,我们使用该消息并将其从队列中删除)。
(3) 在您使用主第一个队列执行的 SP 内部(这部分同步执行):
(3.1) 执行你需要的查询
(3.2) 从第二个队列中清除等效消息(意味着只有在查询结束后才会删除此消息)
(3.3) 检查第二个队列中是否有消息。如果没有消息,则所有任务都结束了,您可以执行最后一步
** 理论上,您可以将数据存储在表中,而不是使用第二个队列,但使用第二个队列可能会比每次执行结束时更新表提供更好的性能。无论如何,您也可以测试使用表格的选项。
推荐阅读
- python - 从导入列表中删除 NaN
- docker - 在容器中运行步骤时,Github Actions 工作流失败
- ios - React Native 突然无法构建 ios 版本了
- python - 如何为无法预见边界的最小化器模拟边界?
- python - Sqlalchemy - 使用 InternalError 关闭游标 Traceback 时出错:找到未读结果
- sql - Sql按userId查询前两行分组
- php - 为什么在 Symfony 中使用相同的盐和密码调用 encodePassword()(或 hashPasswor())会产生不同的哈希?
- android - 'view' 没有设置 NavController,NavigationUI 在点击时带有drawerLayout
- css - 如何在 R 闪亮的 selectizeInput 组标题中设置字体颜色?
- c++ - 如何递归地“从头到尾打印列表”?