如果我错过了某些内容而道歉,这个问题没有意义,或者在阅读PostSharp文档时,答案对我来说并不明显。
我创建了一个简单的日志记录方面,它使用自定义日志记录服务将有关WCF方法调用的详细信息放入数据库中。一旦调用了日志记录方面,它就需要自己继续,而不是阻止WCF方法本身的执行。我很好奇OnEntry()方法是否可以异步?自定义日志记录服务使用异步调用将日志放入数据库,但希望两者之间有更多的分离。
方面:
[Serializable]
class LoggingAspect : OnMethodBoundaryAspect
{
public override void OnEntry(MethodExecutionArgs args)
{
// Perform the logging
}
}
WCF方法:
[LoggingAspect]
public String DoSomething(int param1, int param2)
{
// Do stuff?
}
编辑:解决方案
感谢下面的信息,我能够找到适合我的解决方案。我能够通过将一些时间戳写入DoSomething()和OnEntry()的文件来测试它。我添加了一个Thread.Sleep(30000),然后再写一个时间戳到PerformLog()。我的DoSomething()方法能够在PerformLog()完成写入我的日志服务之前完成:)
方面:
[Serializable]
class LoggingAspect : OnMethodBoundaryAspect
{
public override void OnEntry(MethodExecutionArgs args)
{
// Write timestamp to file.
Task.Run( () => PerformLog(args) );
}
private void PerformLog(MethodExecutiionArgs args)
{
// Thread.Sleep(30000);
// Write timestamp to file.
// Perform the logging
}
}
WCF方法:
[LoggingAspect]
public String DoSomething(int param1, int param2)
{
// Write timestamp to file.
// Do stuff?
}
答案 0 :(得分:1)
为什么不直接为日志逻辑启动任务并让OnEntry方法返回?