public Task <SQLQueryHolder <R> > DelayQueryHolder <R>(SQLQueryHolder <R> holder) { SQLQueryHolderTask <R> task = new SQLQueryHolderTask <R>(holder); // Store future result before enqueueing - task might get already processed and deleted before returning from this method Task <SQLQueryHolder <R> > result = task.GetFuture(); _queue.Push(task); return(result); }
public async Task <SQLQueryHolder <R> > DelayQueryHolder <R>(SQLQueryHolder <R> holder) { return(await Task.Run(() => { string query = ""; try { using (var Connection = _connectionInfo.GetConnection()) { Connection.OpenAsync(); foreach (var pair in holder.m_queries) { List <object[]> rows = new List <object[]>(); using (MySqlCommand cmd = Connection.CreateCommand()) { cmd.CommandText = pair.Value.stmt.CommandText; foreach (var parameter in pair.Value.stmt.Parameters) { cmd.Parameters.AddWithValue("@" + parameter.Key, parameter.Value); } query = cmd.CommandText; using (var reader = cmd.ExecuteReader()) { if (reader.HasRows) { while (reader.Read()) { var row = new object[reader.FieldCount]; reader.GetValues(row); rows.Add(row); } } } } holder.SetResult(pair.Key, new SQLResult(rows)); } } return holder; } catch (MySqlException ex) { HandleMySQLException(ex, query); return holder; } })); }
public SQLQueryHolderTask(SQLQueryHolder <R> holder) { m_holder = holder; m_result = new TaskCompletionSource <SQLQueryHolder <R> >(); }