c# - 如果任务被锁定,它会返回队列,还是也锁定线程?
问题描述
我想知道对于主要问题是资源锁定(例如 COM 端口访问)的情况,任务有多好。
如果我的任务是这样的:
Task
{
lock(resource)
{
resource.doSomething();
}
};
它的本质是等到资源空闲,然后使用它。
我的问题是:如果资源被锁定,任务会返回任务队列,还是线程被锁定直到资源空闲?
我的理解是,如果任务被锁定,在这种情况下,最好使用线程来避免锁定线程填充线程池,对吗?
解决方案
你的假设是对的。该任务一直等到资源空闲,然后继续执行。
您可以将任务定义为LongRunning
一项,以便系统更合适地处理它。此外,您可以出于任何原因运行线程,但考虑到锁定线程不会消耗太多 CPU 资源,并且 ThreadPool 本身会处理足够数量的活动线程。如果您不打算运行很多任务(比如超过 1000 个),请不要担心。