У меня есть эти 2 метода
public DataTable GetData1(int Id)
{
DataTable dt = new DataTable();
using (SqlConnection sqlcon = new SqlConnection(database.Connection.ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("spGetData1", sqlcon))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@id", Value = Id});
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(dt);
}
}
}
return dt;
}
public DataTable GetData2(int Id)
{
DataTable dt = new DataTable();
using (SqlConnection sqlcon = new SqlConnection(database.Connection.ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("spGetData2", sqlcon))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter() { ParameterName = "@id", Value = Id});
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(dt);
}
}
}
return dt;
}
и я хотел бы выполнить их сразу, а также получить данные для дальнейшей обработки.
Я пробовал что-то вроде
var task1 = Task.Factory.StartNew(() => database.Data.GetData1(1));
var task2 = Task.Factory.StartNew(() => database.Data.GetData2(2));
var taskList = new List<Task> { task1, task2 };
Task.WaitAll(taskList.ToArray());
но в последней строке он сбрасывается с помощью
существует одна или несколько ошибок.
Внутреннее исключение
Ссылка на объект не установлена в экземпляр объекта.
Трассировка стека
в System.Threading.Tasks.Task.WaitAll(Задача [] задачи, Int32 миллисекундыTimeout, CancellationToken cancelationToken)
connectionString
получается из System.Data.Entity.DbContext.Database
class
public class DatabaseRepository : IDisposable
{
DbContext dbContext;
public DatabaseRepository()
{
dbContext = new DbContext("connection string ...");
Data = new DataRepository(dbContext.Database);
}
public DataRepository Data { get; set; }
}
но ошибка такая же, даже я установил строку соединения вручную, поэтому я не думаю, что ошибка здесь.
using (SqlConnection sqlcon = new SqlConnection("connection string ..."))
{
using (SqlCommand cmd = new SqlCommand("spGetData2", sqlcon))
{
...
}
}
Как я могу это сделать? Я вижу, что в некоторых примерах используется тип возвращаемого типа Async
, но я не хочу дублировать эти методы.