In. NET Core Logging LoggerMessage.cs
Метод Define<T1>(...)
определяется как:
public static Action<ILogger, T1, Exception> Define<T1>(LogLevel logLevel, EventId eventId, string formatString)
{
var formatter = CreateLogValuesFormatter(formatString, expectedNamedParameterCount: 1);
void Log(ILogger logger, T1 arg1, Exception exception)
{
logger.Log(logLevel, eventId, new LogValues<T1>(formatter, arg1), exception, LogValues<T1>.Callback);
}
return (logger, arg1, exception) =>
{
if (logger.IsEnabled(logLevel))
{
Log(logger, arg1, exception);
}
};
}
Может ли кто-нибудь объяснить мне, в чем преимущество создания локальной функции Log(ILogger logger, T1 arg1, Exception exception)
?
и в чем разница, если бы метод Define<T1>(...)
был бы определен без локальной функции Log
, например:
public static Action<ILogger, T1, Exception> Define<T1>(LogLevel logLevel, EventId eventId, string formatString)
{
var formatter = CreateLogValuesFormatter(formatString, expectedNamedParameterCount: 1);
return (logger, arg1, exception) =>
{
if (logger.IsEnabled(logLevel))
{
logger.Log(logLevel, eventId, new LogValues<T1>(formatter, arg1), exception, LogValues<T1>.Callback);
}
};
}
Есть ли какие-нибудь причины производительности?