为什么lambda表达式没有返回值?

时间:2013-12-07 08:47:05

标签: c# lambda

我读了一封发送电子邮件的代码,其中一部分是:

MailUserState state = new MailUserState()
{
    AutoReleaseSmtp = m_autoDisposeSmtp,
    CurMailMessage = mMailMessage,
    CurSmtpClient = m_SmtpClient,
    IsSmpleMail = true,
    UserState = AsycUserState,
};
if (m_autoDisposeSmtp)
  m_SmtpClient = null;

ThreadPool.QueueUserWorkItem((userState) =>
{
    MailUserState curUserState = userState as MailUserState;
    curUserState.CurSmtpClient.SendAsync(mMailMessage, userState);
}, state);

为什么lambda表达式没有返回值?

我认为它会返回一个callback实例对象。但它没有返回语句。为什么?

1 个答案:

答案 0 :(得分:7)

  

为什么lambda表达式没有返回值?

ThreadPool.QueueUserWorkItem方法的第一个参数是WaitCallback委托,如下所示:

public delegate void WaitCallback(object state)

因此您可以看到它是一个采用一个对象参数且没有返回值的函数。这正是代码中的lambda表达式。如果/当可用时,QueueUserWorkItem方法将从线程池中绘制一个线程,它将在该线程的回调中执行代码。没有回报值。