簡體   English   中英

在EF6中並行運行不同的存儲過程

[英]Running Different Stored Procedures in Parallel in EF6

我有許多不同的存儲過程,我想在並行啟動,以提高我的MVC Web應用程序的性能。 這些存儲過程從多個源收集信息並返回不同的數據類型。 為簡單起見,假設我只有兩個,返回不同的復雜數據類型:

  • ups_Proc1返回usp_Proc1的List
  • usp_Proc2返回usp_Proc2的List

等等....

我可以做其中一個數字,但它會在一系列中解雇它們:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM