Параметр для 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 () {}
Лямбда-синтаксис, с другой стороны, не работает без предоставленного списка параметров.