我有一个TPL任务,它有两个功能。首先,它调用一个Web服务。其次,它将一些数据插入到数据库中。我最多同时启动20个任务,一遍又一遍地执行同样的操作。它们整天都在调用Web服务并将数据插入到数据库中。
我在.NET中相当新于TPL。我已经使用过后台工作进程和异步Web服务。
Web服务调用和数据库插入都是阻塞调用,在任务正在运行的线程内部进行。
我理解,在使用任务时,.NET为您管理一个线程池。是这样吗?
如果我使用async和await()进行异步调用而不是进行阻塞调用,线程池是否会拥有更多可用的线程?
我的理论是(我不确定为什么这么想),当线程在等待阻塞的Web服务时,它忙于无事可做,并且不能暂时将其资源返回到池中。但是,我想知道,如果任务正在等待异步调用完成,主要任务线程是否能够切换以便让其他内容进行处理。
我的理论正确吗?还是我在凭空想象?
我使用C#和.NET 4.0,但如果需要,我可以使用4.5。
我在.NET中相当新于TPL。我已经使用过后台工作进程和异步Web服务。
Web服务调用和数据库插入都是阻塞调用,在任务正在运行的线程内部进行。
我理解,在使用任务时,.NET为您管理一个线程池。是这样吗?
如果我使用async和await()进行异步调用而不是进行阻塞调用,线程池是否会拥有更多可用的线程?
我的理论是(我不确定为什么这么想),当线程在等待阻塞的Web服务时,它忙于无事可做,并且不能暂时将其资源返回到池中。但是,我想知道,如果任务正在等待异步调用完成,主要任务线程是否能够切换以便让其他内容进行处理。
我的理论正确吗?还是我在凭空想象?
我使用C#和.NET 4.0,但如果需要,我可以使用4.5。
async
/await
几乎完全使用Promise任务。请查看我的博客文章获取更多信息。 - Stephen Cleary