Параметр для QueueUserWorkItem с лямбда-выражением?

В следующем коде, что означает параметр 's'? Разве мы не можем просто опустить 's', так как он не используется в методе, поэтому у нас есть анонимный метод без параметра like () => ...?

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");
 }

1 ответ

Решение

Синтаксис C# 2.0 для анонимных делегатов позволяет опустить список параметров, в этом случае он будет соответствовать любому набору (неref не-out) параметров и игнорировать их.

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

Обратите внимание, что delegate {} отличается от delegate () {}

Лямбда-синтаксис, с другой стороны, не работает без предоставленного списка параметров.

Другие вопросы по тегам