c# - Using async/await to improve performance -


i have service method runs set of "rules" on incoming data. of these rules perform simple checks validating id number, , go out databases lookup information. looks pretty this:

public void runrules(validationrequest request) {     // each rule returns bool example     var rules = getrules();      var results = list<bool>();      parallel.foreach(rules, rule =>     {         var result = rule();          lock(results)             results.add(result);     });      foreach(var result in results)     {         recordresultindatabase(result);     }      callnextservice(somenewrequest); } 

i think (but not sure) improve things using async/await. idea is, when 1 rule finishes call recordresultindatabase while other rules still running.

as requirement though, wouldn't want call callnextservice happen until rules have ran , results recorded in database.

problem i'm absolute noob async/await , think (but not sure) task.waitall might i'm looking for.

i'm uncertain of how this, i'm guessing:

list<task<bool>> ruletasks = getrules(); task.waitall(ruletasks);  // somehow results of rules , record them in db??? 

i don't think async-await improve performance in case. in short, async-await useful in 2 cases:

  1. to improve responsiveness of gui applications.
  2. to improve scalability of server applications.

neither of seems case, there no reason use async-await in code.

if want call recordresultindatabase() while requests being processed, instead of when of them done, can use plinq instead of parallel.foreach(). benefit, simplify code:

var results = getrules().asparallel().select(rule => rule());  foreach (var result in results) {     recordresultindatabase(result); } 

Comments

Popular posts from this blog

java.util.scanner - How to read and add only numbers to array from a text file -

rewrite - Trouble with Wordpress multiple custom querystrings -

php - Accessing static methods using newly created $obj or using class Name -