如何使PostSharp的OnMethodBoundaryAspect OnEntry方法异步

时间:2013-11-18 18:30:50

标签: c# wcf asynchronous postsharp

如果我错过了某些内容而道歉,这个问题没有意义,或者在阅读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?
}

1 个答案:

答案 0 :(得分:1)

为什么不直接为日志逻辑启动任务并让OnEntry方法返回?