【问题标题】:How Create Threads Using Task如何使用任务创建线程
【发布时间】:2020-06-08 20:13:34
【问题描述】:

我有一个对返回正确数据的数据库的查询

public async Task<IEnumerable<FacturaDeVentaSP>> ConsultaBD(int page, int row)
{           
    try
    {
        using (var connection = new MySqlConnection(connectionString))
        {
            return await connection.QueryAsync<FacturaDeVentaSP>("facturadeventaSP",
                        parameter, commandType: System.Data.CommandType.StoredProcedure);
        }
    }
    catch (Exception ex)
        {
            throw ex;
        }
    }

我想要的是创建 x 个执行线程,并在每个线程内向数据库发出 x 个请求。

Task[] tasks = new Task[countThreads];

for (int i = 0; i < tasks.Length; i++)
{
tasks[i] = Task.Factory.StartNew(()=>new Random().NextDouble());};                
}

如何在每个线程上执行ConsultaDB() 方法x

【问题讨论】:

  • 如果您正在查询数据库,那么这就是 IO,您不需要单独的线程。只需使用asyncawait 即可获取您可以等待的任务。这样您就可以在等待其他人的 IO 完成时发出新的查询。
  • This EF 相关,但我认为通常与 dapper/ormless 处理大致相同。因此,您需要考虑是否实际上更繁琐的代码会在您的特定用例中为您带来收益。

标签: c# task taskfactory


【解决方案1】:

Task.Run代替Factory

Task[] tasks = new Task[countThreads];

for (int i = 0; i < tasks.Length; i++)
{
    tasks[i] = Task.Run(() =>  .... };
}

Task.WaitAll(tasks);

【讨论】:

  • 这应该足以让 OP 以他们的奇怪想法运行......对于其他所有人 - 使用异步方法从 DB 中读取 - stackoverflow.com/questions/39967208/…
  • @AlexeiLevenkov 我不同意 OP 有不同的物流问题。然而,这是 OP 心目中的问题
猜你喜欢
  • 2012-03-24
  • 2013-01-25
  • 2012-06-15
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
相关资源
最近更新 更多