首页 > 解决方案 > 如果任务被锁定,它会返回队列,还是也锁定线程?

问题描述

我想知道对于主要问题是资源锁定(例如 COM 端口访问)的情况,任务有多好。

如果我的任务是这样的:

    Task
    {
        lock(resource)
        {
            resource.doSomething();
        }
    };

它的本质是等到资源空闲,然后使用它。

我的问题是:如果资源被锁定,任务会返回任务队列,还是线程被锁定直到资源空闲?

我的理解是,如果任务被锁定,在这种情况下,最好使用线程来避免锁定线程填充线程池,对吗?

标签: c#multithreadingthreadpool

解决方案


你的假设是对的。该任务一直等到资源空闲,然后继续执行。
您可以将任务定义为LongRunning一项,以便系统更合适地处理它。此外,您可以出于任何原因运行线程,但考虑到锁定线程不会消耗太多 CPU 资源,并且 ThreadPool 本身会处理足够数量的活动线程。如果您不打算运行很多任务(比如超过 1000 个),请不要担心。


推荐阅读