[英]Running Different Stored Procedures in Parallel in EF6
我有许多不同的存储过程,我想在并行启动,以提高我的MVC Web应用程序的性能。 这些存储过程从多个源收集信息并返回不同的数据类型。 为简单起见,假设我只有两个,返回不同的复杂数据类型:
等等....
我可以做其中一个数字,但它会在一系列中解雇它们:
List<usp_Task1> taskOneResult = await db.usp_Task1(parms).AsQueryable()
.ToListAsync();
List<usp_Task2> taskTwoResult = await db.usp_Task2(parms).AsQueryable()
.ToListAsync();
我见过的解决方案使用await Task.WhenAll()
并传入一组任务,但我的是具有不同返回类型的任务。 那么在处理不同的复杂返回类型时,如何并行激发多个存储过程呢?
更新 - 5/20/2015
最后得到了一个可行的解决方案,我相信它是并行处理所有任务的。 我不得不使用Task.Factory.StartNew()
命令将每个函数创建为要传递给Task.WaitAll()
的任务。
我把所有这些都打包成了一个新类,它包含了我正在使用的每个存储过程返回类型的List<>
,允许我处理我的所有业务逻辑。 构造函数中的代码看起来有点像这样:
var task1 = Task.Factory.StartNew(() => CallStoredProc1(parms));
var task2 = Task.Factory.StartNew(() => CallStoredProc2(parms));
var taskList = new List<Task> { task1, task2 };
Task.WaitAll(taskList.ToArray());
CallStoredProc1()
和CallStoredProc2()
是私有的void方法,我在那里执行存储过程调用并处理数据转换。
非常感谢任何反馈!
想我会将我的更新重新发布为解决方案。
最后得到了一个可行的解决方案,我相信它是并行处理所有任务的。 我不得不使用Task.Factory.StartNew()
命令将每个函数创建为要传递给Task.WaitAll()
的任务。
我把所有这些都打包成了一个新类,它包含了我正在使用的每个存储过程返回类型的List<>
,允许我处理我的所有业务逻辑。 构造函数中的代码看起来有点像这样:
var task1 = Task.Factory.StartNew(() => CallStoredProc1(parms));
var task2 = Task.Factory.StartNew(() => CallStoredProc2(parms));
var taskList = new List<Task> { task1, task2 };
Task.WaitAll(taskList.ToArray());
CallStoredProc1()
和CallStoredProc2()
是私有的void方法,我在那里执行存储过程调用并处理数据转换。
非常感谢任何反馈!
Task.WhenAll
支持您拥有的Task
输入。 因此,首先使用Task.WhenAll
确保完成所有任务。 然后,使用Task.Result
从所有任务中获取实际结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.