【问题标题】:Parameter to QueueUserWorkItem with a lambda expression?带有 lambda 表达式的 QueueUserWorkItem 参数?
【发布时间】:2014-11-06 05:02:15
【问题描述】:

在下面的代码中,参数's'代表什么?我们可以不只是省略's',因为它没有在方法中使用,所以我们有一个没有参数的匿名方法,如 () => ...?

ThreadPool.QueueUserWorkItem((s)=> 
{
 Console.WriteLine("Working on a thread from threadpool");
});

更新 1:

根据接受的答案,匿名方法只是普通 WaitCallback 委托方法的替代品,如下面的 ocd 中的委托方法,QueueUserWorkItem 需要它作为参数。因此,'s' 应该是对象类型,因为它是 ThreadProc 方法的参数。

void ThreadProc(Object stateInfo) {
   // No state object was passed to QueueUserWorkItem, so  
   // stateInfo is null.
    Console.WriteLine("Working on a thread from threadpool");
 }

【问题讨论】:

    标签: c# lambda queueuserworkitem


    【解决方案1】:

    匿名委托的 C# 2.0 语法允许省略参数列表,在这种情况下,它将匹配任何一组(非refout)参数并忽略它们。

    ThreadPool.QueueUserWorkItem(delegate {
       Console.WriteLine("Working on a thread from threadpool");
    });
    

    请注意,delegate {}delegate () {} 不同

    另一方面,如果没有提供参数列表,则 lambda 语法将无法工作。

    【讨论】:

    • 当我在匿名方法中检查's'是否为空时,它为空。那么为什么需要's'令人困惑?
    • @Sunil:它是必需的,因为它是System.Threading.WaitCallback 类型的一部分。
    • 我可以像这样运行一个任务:Task.Run (()=> { DoThis();}),它允许一个没有任何参数的方法。对不起,它没有意义。
    • 那么它是WaitCallback类型的参数,通常传递给QueueUserWorkItem方法?
    • 是的,QueueUserWorkItem 需要一个 WaitCallback 代表。所以 lambda 或匿名委托必须与它兼容。而WaitCallback 有一个参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 2018-07-31
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多