我读了一封发送电子邮件的代码,其中一部分是:
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
实例对象。但它没有返回语句。为什么?
答案 0 :(得分:7)
为什么lambda表达式没有返回值?
ThreadPool.QueueUserWorkItem
方法的第一个参数是WaitCallback
委托,如下所示:
public delegate void WaitCallback(object state)
因此您可以看到它是一个采用一个对象参数且没有返回值的函数。这正是代码中的lambda表达式。如果/当可用时,QueueUserWorkItem
方法将从线程池中绘制一个线程,它将在该线程的回调中执行代码。没有回报值。