2017-03-22 10 views
2

今、私はまだLambdas、Funcs、Delegates、Actionsなどに少し新しくなっていますが、データベース操作に依存する代入を並列化するためのより良い方法を見つけようとしています。言い換えれば、私はデータベースから一度にたくさんのデータを引き出すことができます。私はパラレルで、シリアルではしたくありません。割り当てを並列化する方が良い

これまでのところ、私はをParallel.Foreach()とコンボで使用していますが、これを行うもっとエレガントな方法があるのだろうかと思います。 Parallel.Invokeを試してみましたが、Lambda式のInvoke()を呼び出すことができませんでした(多分funcリテラルはありません)。どうやらInvoke()を呼び出してActionとして扱うには、最初にFuncに代入する必要があります。

これはこれまで私が行ってきたことです。

  List<Func<Object>> Assignments = new List<Func<object>>(); 
      Assignments.Add(() => lookups.Acknowledgements = DBRepository.GetAll<Acknowledgement>()); 
      Assignments.Add(() => lookups.AcknowledgementDetails = DBRepository.GetAll<AcknowledgementDetail>()); 
      Assignments.Add(() => lookups.AcknowledgementRadioButtons = DBRepository.GetAll<AcknowledgementRadioButtonSection>()); 
      Assignments.Add(() => lookups.AcknowledgementRadionButtonItems = DBRepository.GetAll<AcknowledgementRadioButtonSectionItem>()); 
      Assignments.Add(() => lookups.AcknowledgementTextBoxes = DBRepository.GetAll<AcknowledgementTextBoxSection>()); 
      Assignments.Add(() => lookups.MarketingPages = DBRepository.GetAll<MarketingPage>()); 
      Assignments.Add(() => lookups.MarketingPageDetails = DBRepository.GetAll<MarketingPage_Detail>()); 
      // and many many more... 
      Parallel.ForEach(Assignments, (assignement) => 
      { 
       assignement.Invoke(); 

      }); 

割り当て操作を一般的に並列化するには、よりきれいで、より洗練された方法がありますか?

答えて

2

あなたはまだいくつかの行を保存するためにParallel.Invokeを使用することができます。私はそれを感謝

Parallel.Invoke(
    () => lookups.Acknowledgements = DBRepository.GetAll<Acknowledgement>(), 
    () => lookups.AcknowledgementDetails = DBRepository.GetAll<AcknowledgementDetail>() 
); 
+0

を、あなたのParallel.Invoke()のコードは動作します。私は明らかに私の以前の試みで文法を正しく理解していませんでした。 –

関連する問題