/// <summary> /// <paramref name="cmd"/> 를 비동기 방식으로 실행하여, Scalar 값을 반환하는 <see cref="Task{Object}"/>를 빌드합니다. /// </summary> /// <param name="db">DAAB의 SQLite 용 Database 인스턴스</param> /// <param name="cmd">실행할 cmd 인스턴스</param> /// <param name="parameters">Command Parameters</param> /// <returns>결과 Scalar 값을 가지는 Task의 인스턴스</returns> public static Task <object> ExecuteScalarAsync(this SQLiteDatabase db, SQLiteCommand cmd, params IAdoParameter[] parameters) { cmd.ShouldNotBeNull("cmd"); if (IsDebugEnabled) { log.Debug("cmd.ExecuteScalar 를 비동기 방식으로 실행합니다. CommandText=[{0}], Parameters=[{1}]", cmd.CommandText, parameters.CollectionToString()); } var newConnectionCreated = false; if (cmd.Connection == null) { cmd.Connection = SQLiteTool.CreateSQLiteConnection(db, ref newConnectionCreated); } if (parameters != null) { AdoTool.SetParameterValues(db, cmd, parameters); } return (Task.Factory .StartNew(() => cmd.ExecuteScalar(), TaskCreationOptions.PreferFairness) .ContinueWith(task => { if (newConnectionCreated) { AdoTool.ForceCloseConnection(cmd); } return task; }, TaskContinuationOptions.ExecuteSynchronously) .Unwrap()); }
/// <summary> /// <paramref name="cmd"/> 를 이용하여, <see cref="Task{SqlDataReader}"/>를 반환받습니다. /// 받환받은 DataReader는 꼭 Dispose() 해 주어야 Connection이 닫힙니다. /// </summary> /// <param name="db">DAAB의 SQLite 용 Database 인스턴스</param> /// <param name="cmd">실행할 cmd 인스턴스</param> /// <param name="parameters">Command Parameters</param> /// <returns></returns> public static Task <SQLiteDataReader> ExecuteReaderAsync(this SQLiteDatabase db, SQLiteCommand cmd, params IAdoParameter[] parameters) { cmd.ShouldNotBeNull("cmd"); if (IsDebugEnabled) { log.Debug("cmd.ExecuteReader 를 비동기 방식으로 실행합니다. CommandText=[{0}], Parameters=[{1}]", cmd.CommandText, parameters.CollectionToString()); } var newConnectionCreated = false; if (cmd.Connection == null) { cmd.Connection = SQLiteTool.CreateSQLiteConnection(db, ref newConnectionCreated); } if (parameters != null) { AdoTool.SetParameterValues(db, cmd, parameters); } var commandBehavior = newConnectionCreated ? CommandBehavior.CloseConnection : CommandBehavior.Default; return(Task.Factory.StartNew(() => cmd.ExecuteReader(commandBehavior), TaskCreationOptions.PreferFairness)); }