ThreadPool.QueueUserWorkItem use case

本文关键字:case use QueueUserWorkItem ThreadPool | 更新日期: 2023-09-27 18:28:55

我正试图以这种方式使用该方法:

public void Method()
{
        ThreadPool.QueueUserWorkItem(() =>
        {
            while(!paused)
            {
                ThreadPool.QueueUserWorkItem(() => {...);
            }
        });
    }
}

问题的出现是因为它在第一次调用中向我抛出了一个编译错误。

错误CS1593:委托System.Threading.WaitCallback' does not take 0'参数

你知道如何在没有争论的情况下做到这一点吗,有其他选择吗?

ThreadPool.QueueUserWorkItem use case

您可以只为lambda表达式提供一个参数,然后忽略它:

ThreadPool.QueueUserWorkItem(ignored =>
{
    while(!paused)
    {
        ThreadPool.QueueUserWorkItem(alsoIgnored => {...});
    }
});

或者使用匿名方法:

ThreadPool.QueueUserWorkItem(delegate
{
    while(!paused)
    {
        ThreadPool.QueueUserWorkItem(delegate {...});
    }
});

如果您不关心匿名方法的参数,则不必声明它们。

ThreadPool.QueueUserWorkItem需要一个System.Threading.WaitCallback委托作为其参数。此委托有一个参数,而lambda表达式没有。如果要忽略该参数,可以使用:

ThreadPool.QueueUserWorkItem(_ =>
{
    //...
});

您传递的委托需要接受一个参数。如果您想忽略它,您可以将括号替换为任何变量名。