c# - Using BeginExecuteNonQuery with async tasks -


i'm working on adding methods base repository handle other code process queries use async tasks. wraping task around existing beginexecutenonquery , endexecutenonquery methods.

are there pitfalls of using method this? correct catch exceptions happened during execution of sql statement in asynccallback?

public class repo {     public class sqlcommandasyncstate<t>     {         public sqlcommand sqlcommand { get; set; }         public taskcompletionsource<t> taskcompletionsource { get; set; }          public sqlcommandasyncstate()         {             taskcompletionsource = new taskcompletionsource<t>();         }     }      private int? sqlcommand_endexecutenonquery(sqlcommand sqlcommand, iasyncresult result)     {          try         {              return sqlcommand.endexecutenonquery(result);         }         catch (exception ex)         {              // logerror(logimportance.fatal, ex);         }                 {             sqlcommand.connection.dispose();         }          return null;     }      private void sqlcommand_executenonqueryforintcompleted(iasyncresult result)     {         sqlcommandasyncstate<int?> state = result.asyncstate sqlcommandasyncstate<int?>;         state.taskcompletionsource.setresult(sqlcommand_endexecutenonquery(state.sqlcommand, result));     }      private void sqlcommand_executenonqueryforboolcompleted(iasyncresult result)     {         sqlcommandasyncstate<bool?> state = result.asyncstate sqlcommandasyncstate<bool?>;         int? rowsaffected = sqlcommand_endexecutenonquery(state.sqlcommand, result);         state.taskcompletionsource.setresult(rowsaffected.hasvalue ? (bool?)(rowsaffected.value > 0) : null);     }      public async task<bool?> updateasync(string commandtext, sqlparameter[] parameters)     {         sqlcommandasyncstate<bool?> state = new sqlcommandasyncstate<bool?>();          sqlconnection sql_connection = new sqlconnection(connectionstring);          try         {             sql_connection.open();             state.sqlcommand = new sqlcommand(commandtext, sql_connection);             state.sqlcommand.commandtype = commandtype.storedprocedure;             state.sqlcommand.parameters.addrange(parameters);             state.sqlcommand.beginexecutenonquery(new asynccallback(sqlcommand_executenonqueryforboolcompleted), state);         }         catch (exception ex)         {             // logerror(logimportance.fatal, ex);             state.taskcompletionsource.setresult(null);         }          return await state.taskcompletionsource.task;     }      public async task<int?> updatewithcountasync(string commandtext, sqlparameter[] parameters)     {         sqlcommandasyncstate<int?> state = new sqlcommandasyncstate<int?>();          sqlconnection sql_connection = new sqlconnection(connectionstring);          try         {             sql_connection.open();             state.sqlcommand = new sqlcommand(commandtext, sql_connection);             state.sqlcommand.commandtype = commandtype.storedprocedure;             state.sqlcommand.parameters.addrange(parameters);             state.sqlcommand.beginexecutenonquery(new asynccallback(sqlcommand_executenonqueryforintcompleted), state);         }         catch (exception ex)         {             // logerror(logimportance.fatal, ex);             state.taskcompletionsource.setresult(null);         }          return await state.taskcompletionsource.task;     } } 

task.factory.fromasync designed that.


Comments

Popular posts from this blog

matlab - Deleting rows with specific rules -

php - MySQLi multi_query results for later use -