c# - 做数据库操作时线程是否阻塞?

标签 c# multithreading wcf threadpool

我们有一个 WCF 服务(部署在 IIS 上),它对数据库进行昂贵的调用。它不使用任何类型的异步编程 (async\await)。

using (SqlDataAdapter adapter = new SqlDataAdapter())
{
    using (SqlCommand command = new SqlCommand())
    {
        command.CommandType = CommandType.StoredProcedure;
        command.CommandText = "StoreProcedure_NAME"; //Takes 6 seconds
        command.Connection = connection;
        adapter.SelectCommand = command;
        adapter.Fill(dataset);
        return dataset;
    }
}

现在,在 6 秒的等待时间内调用数据库的线程(我相信这是一个 wcf 线程池线程)会发生什么情况。此线程是否阻塞并占用 CPU 周期或线程是否处于等待状态(等待中断)?

最佳答案

是的,它被阻止了。 async 方法旨在将线程返回到监听池,并在任务完成时从线程池中检索新的(或相同的)线程。非 async 方法将阻塞您的调用线程。

关于c# - 做数据库操作时线程是否阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31386428/

相关文章:

c# - 更改选择列表中的值c#

c# - 我的进程在等待输入吗?

c# - 将 Razor View 渲染为字符串会导致额外的格式标记(制表符、换行符)?如何去除?

c++ - 调试器问题

c# - Powershell New-WebServiceProxy 异步方法

c# - 通过 MSMQ 和 WCF 发送的超过接收者配额的消息会怎样?

c# - 如何在 Unity 容器中实现对象范围的单例?

C++:简单的多线程示例并不比单线程快

c - 线程和指针 C

.net - 用于托管 WCF 集成服务的 Azure Web 应用程序或云服务