I have a method Logthat creates an object LogMessageand fires an eventOnMessage
The method returns the object LogMessageafter the call event.
Is it possible to delay the event, so it happens after the return statement?
I need this because I want to be able to modify the object LogMessagebefore the event goes up.
public class Logger
{
public static event LogMessageCreatedEventHandler OnMessage;
public LogMessage Log(string logLevel, string message)
{
LogMessage logMessage = new LogMessage
{
Message = message,
LogLevel = logLevel,
DateTime = DateTime.UtcNow
};
OnMessage?.Invoke(this, new LogMessageCreatedEventArgs { LogMessage = logMessage });
return logMessage;
}
}
var logMessage = _logger.Log("Debug", "Product has been created"); <-- the event is invoked now
logMessage.CustomProp.Add("isProductsService", true); <-- this property is not available in the Event Handler
One idea would be to use Task.Delay(), but I don't think this is a good solution.
Task.Delay(1000).ContinueWith(_ => {
OnMessage?.Invoke(this, new LogMessageCreatedEventArgs { LogMessage = logMessage });
});
return message;
source
share