Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C以异步方式与数据库交互,不工作。_C#_Asp.net Mvc_Async Await - Fatal编程技术网

C# C以异步方式与数据库交互,不工作。

C# C以异步方式与数据库交互,不工作。,c#,asp.net-mvc,async-await,C#,Asp.net Mvc,Async Await,我只是想创建一个虚拟的ASP.NET MVC项目,在这里我想探索更多关于async&Wait的知识。我在DB访问层和存储库层创建了异步方法,并且我还确保操作也是以异步方式编写的。我注意到一个方法的执行大约需要7毫秒,所以从逻辑上讲,如果我调用该方法3次,我也应该需要7毫秒或7毫秒左右!但是大约需要20-23毫秒。我确信我做错了什么。我的代码片段如下所示: 数据访问层: 存储库: 行动: 您正在等待每个调用,因此在它进入下一个调用之前,它将暂停执行。考虑创建三个任务,并等待它们: 您正在等待每个调

我只是想创建一个虚拟的ASP.NET MVC项目,在这里我想探索更多关于async&Wait的知识。我在DB访问层和存储库层创建了异步方法,并且我还确保操作也是以异步方式编写的。我注意到一个方法的执行大约需要7毫秒,所以从逻辑上讲,如果我调用该方法3次,我也应该需要7毫秒或7毫秒左右!但是大约需要20-23毫秒。我确信我做错了什么。我的代码片段如下所示:

数据访问层:

存储库:

行动:


您正在等待每个调用,因此在它进入下一个调用之前,它将暂停执行。考虑创建三个任务,并等待它们:


您正在等待每个调用,因此在它进入下一个调用之前,它将暂停执行。考虑创建三个任务,并等待它们:


是什么让您认为用wait调用3个方法会并行执行它们?并行编程和异步编程是不同的概念。在编写代码之前,您应该熟悉该理论。此外,用Task.Run包装方法被认为是一种不好的做法。此外,创建线程池线程来执行I/O操作是对处理能力的浪费。最后一条注释是,为了了解如何以真正异步的方式执行该查询,您可能希望查看ORM,而不是加载数据表,然后获取entities@CamiloTerevinto我知道基本的区别!我既不期望并行性能,也不期望精确的7毫秒!请仔细阅读我的问题,我提到应该需要7毫秒或7毫秒左右。。。所以它可能是10或13或任何接近的值。单次执行3次合乎逻辑吗!这就是为什么我脑海中会出现这样的问题:那是因为任务。延迟是一个异步操作。正如我在第二篇评论中提到的,您正在将同步操作包装到一个任务中,这是一种浪费。是什么让您认为用wait调用3个方法将并行执行它们?并行编程和异步编程是不同的概念。在编写代码之前,您应该熟悉该理论。此外,用Task.Run包装方法被认为是一种不好的做法。此外,创建线程池线程来执行I/O操作是对处理能力的浪费。最后一条注释是,为了了解如何以真正异步的方式执行该查询,您可能希望查看ORM,而不是加载数据表,然后获取entities@CamiloTerevinto我知道基本的区别!我既不期望并行性能,也不期望精确的7毫秒!请仔细阅读我的问题,我提到应该需要7毫秒或7毫秒左右。。。所以它可能是10或13或任何接近的值。单次执行3次合乎逻辑吗!这就是为什么我脑海中会出现这样的问题:那是因为任务。延迟是一个异步操作。正如我在第二篇评论中提到的,您正在将同步操作包装到任务中,这是一种浪费。
    public async Task<DataTable> DtGetAllCustomers()
    {
        await Task.Run(() =>
        {
            _dtCustomer = new DataTable();
            _connectionString = Repo.GetConnString();
            _spName = "spGetCus";
            _spParameters = new SqlParameter[]
            {
            new SqlParameter("@QryOption",1)
            };
            using (var conn = new SqlConnection(_connectionString))
            {
                using (var cmd = new SqlCommand())
                {
                    cmd.Connection = conn;
                    cmd.CommandText = _spName;
                    cmd.Parameters.AddRange(_spParameters);
                    cmd.CommandType = CommandType.StoredProcedure;
                    conn.Open();

                    using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                    {
                        da.Fill(_dtCustomer);
                        conn.Close();
                        da.Dispose();
                    }
                }
            }

        });

        return _dtCustomer;
    }
 public async Task<List<CustomerModel>> GetAllCustomers()
            {
                _dtCustomer = await _customerDal.DtGetAllCustomers();
                List<CustomerModel> allCustomers = new List<CustomerModel>();
                return allCustomers = (from DataRow row in _dtCustomer.Rows
                                       select new CustomerModel
                                       {
                                           CustomerId = (int)row["CustomerId"],
                                           CustomerName = (string)row["CustomerName"]
                                       }).ToList();
            }
public async Task<ActionResult> Index()
        {
            var watch = System.Diagnostics.Stopwatch.StartNew();
            List<CustomerModel> model = new List<CustomerModel>();
            CustomerRepo2 aa = new CustomerRepo2();
            await aa.GetAllCustomers();
            await aa.GetAllCustomers();
            await aa.GetAllCustomers();
            watch.Stop();
            var elapsedMs = watch.ElapsedMilliseconds;
            ViewBag.time = elapsedMs;
            return View();
        }
var task1 = aa.GetAllCustomers();
var task2 = aa.GetAllCustomers();
var task2 = aa.GetAllCustomers();
await Task.WhenAll(task1, task2, task3);