Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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# F#async在ASP.NET中使用ThreadPool_C#_Asp.net_Asynchronous_F#_Async Await - Fatal编程技术网

C# F#async在ASP.NET中使用ThreadPool

C# F#async在ASP.NET中使用ThreadPool,c#,asp.net,asynchronous,f#,async-await,C#,Asp.net,Asynchronous,F#,Async Await,我想了解threadpool在C与F#async中的用法。我在ASP.NET的控制器中有一个thisF#方法: 成员x.Get()= 异步的{ 让!res=loadCustomers() 返回res }|>Async.startask 我想知道,如果异步块中的所有内容都在ThreadPool上运行,我正在使用多少资源。 在C#with async/await中,它将在当前线程上运行,只是异步地等待IO完成。 startask函数的文档说“在线程池中执行一个计算”,所以我很惊讶我使用了比需要更多

我想了解
threadpool
C与F#async
中的用法。我在ASP.NET的控制器中有一个this
F#方法:

成员x.Get()=
异步的{
让!res=loadCustomers()
返回res
}|>Async.startask
我想知道,如果异步块中的所有内容都在
ThreadPool
上运行,我正在使用多少资源。 在
C#with async/await
中,它将在
当前线程上运行,只是异步地等待IO完成。


startask
函数的文档说
“在线程池中执行一个计算”
,所以我很惊讶我使用了比需要更多的资源。我发现
startimimediate
当前线程上开始工作,但只返回
Unit
,我需要
Task for asp.net

任务使用的资源比线程少,因为它们使用线程池,并且可能在同一线程的不同周期上运行。另一方面,线程为自己的目的使用一个单独的线程,因此随着时间的推移,将倾向于使用更多的资源,因为空周期不能用其他任务填充。通常
Async
调用不涉及任何单独的
线程。它在IO完成端口上工作,该端口是基于硬件的队列。使用一个单独的线程池肯定是在这里分配的额外资源,但在某些情况下,它是有用的,特别是当我们不想使用调用的同步上下文时thread@ShannonHolsinger也许问题的标题有误导性,我已经将线程更改为线程池。问题是C#async/await根本不使用线程池,它在IO完成端口上工作。但我发现关于F#的是异步块在threadpool上运行。当我真的让你失望的时候!这只是IO,线程没有被阻止,但它仍在使用线程池来处理异步块中的其他代码。@MrinalKamboj我关心的是,当我执行async.Start或async.startask时,它会将工作移动到线程池,并涉及多个线程。是的,当我允许时IO没有阻塞线程!但异步块中的其他代码移到了线程池中。@Michal长话短说,你们并没有做错什么。ASP.NET MVC可以识别
async
签名,因此它知道在等待数据库时释放请求线程。这样可以减少使用的线程数。当数据库返回时,ASP.NET将重建原始同步上下文并继续。