Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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#_Asp.net_Multithreading_Async Await - Fatal编程技术网

C# 创建新任务会生成后台线程还是线程池线程

C# 创建新任务会生成后台线程还是线程池线程,c#,asp.net,multithreading,async-await,C#,Asp.net,Multithreading,Async Await,我正在尝试对ASP.NET应用程序进行异步数据库调用。如果我理解正确,我不想利用线程池线程进行异步I/O调用,这样我就可以保持线程池处理请求。下面的代码是从我的线程池中提取一个线程还是生成一个后台线程 public IEnumerable<dynamic> DbCall(string sql) { return // DB Operation; } public Task<IEnumerable<dynamic>&g

我正在尝试对ASP.NET应用程序进行异步数据库调用。如果我理解正确,我不想利用线程池线程进行异步I/O调用,这样我就可以保持线程池处理请求。下面的代码是从我的线程池中提取一个线程还是生成一个后台线程

    public IEnumerable<dynamic> DbCall(string sql)
    {
        return // DB Operation;
    }

    public Task<IEnumerable<dynamic>> DbCallAsync(string sql)
    {
        var task = new Task<IEnumerable<dynamic>>(() => this.DbCall(sql));
        task.Start();
        return task;
    }
公共IEnumerable数据库调用(字符串sql) { 返回//DB操作; } 公共任务DbCallAsync(字符串sql) { var task=newtask(()=>this.DbCall(sql)); task.Start(); 返回任务; }
默认计划程序上的任务在线程池上运行。默认情况下,它们不会启动新线程。这回答了你的问题

也就是说,您误解了异步IO的目的和内部工作方式。异步IO在运行时根本不消耗任何线程。但是,您没有使用异步IO。您正在将IO移动到线程池。这在ASP.NET中永远不会有帮助。它总是降低性能

将阻塞工作移动到另一个线程怎么可能有帮助?!您仍在阻塞线程。只是一个不同的。如果线程池已耗尽,请增加限制。不需要手动启动线程


研究异步为何有益以及何时有益。如果没有这种理解,您将无法成功地使用它。

是的,使用
任务
构造函数在另一个线程中执行代码,在本例中是线程池线程


您应该使用本质上是异步的而不是同步的DB操作。您根本不应该使用
任务
构造函数来构造表示异步操作的
任务
。如何进行这项工作将取决于您用于执行IO的API。

我澄清了一点。。。不管怎么说,这就是XY问题。嗯,我想我当时不明白。我的印象是,它会将处理I/O操作的当前线程释放回线程池,直到I/O操作完成为止。@DaleAlleshouse它会这样做。但是IO操作现在在不同的线程上同步运行。这样做没有任何好处。我使用的是simple.data,它不支持异步。我想知道如何将其称为异步。问题是我需要并行运行5条sql语句。我不想成为阻止6个线程池线程来完成这项任务。@DaleAlleshouse然后开始使用一种查询机制,该机制具有异步支持,允许您在不阻止线程的情况下执行查询。如果你不这样做,你就别无选择。