小编Tej*_*jal的帖子

带有Async/Await的ContextBoundObject

我有一个使用AOP和ContextBoundObject的系统.

这用于拦截方法调用并在函数之前和之后执行某些操作.一切正常,直到我将'截获的功能'异步.

据我所知,C#编译器将异步方法重写为状态机,一旦达到'await',它就会将控制权返回到接收器.因此它继续进入拦截并执行仅在Method之后执行的代码.

我可以看到IMessageSink中有一个"AsyncProcessMessage",但我找不到调用它的方法,我不确定它是否可以在async/await场景中工作.

有没有办法让Async/Await与ContextBoundObject一起工作?使用另一种面向方面编程方法是唯一的选择吗?

下面的代码示例包含用"Audit"属性修饰的方法,并放在AuditFacade中,这是一个ContextBoundObject.AuditSink中的SyncProcessMessage方法具有在方法之前和之后执行的逻辑.

 [AuditBoundary]
public class AuditFacade : ContextBoundObject
{
    [Audit]
    public ResponseObject DoSomthing()
    {
        //Do something
        return new ResponseObject();
    }

    /// <summary>
    /// Async Method to be intercepted
    /// </summary>
    /// <returns></returns>
    [Audit]
    public async Task<ResponseObject> DoSomthingAysnc()
    {
        //Do something Async
        await Task.Delay(10000);
        return new ResponseObject();
    }
}

[AttributeUsage(AttributeTargets.Method)]
public class AuditAttribute : Attribute
{
}

[AttributeUsage(AttributeTargets.Class)]
public class AuditBoundaryAttribute : ContextAttribute
{
    public AuditBoundaryAttribute()
        : base("AuditBoundary" + Guid.NewGuid().ToString())
    {
    }
    public override void GetPropertiesForNewContext(IConstructionCallMessage ctorMsg) …
Run Code Online (Sandbox Code Playgroud)

.net c# aop asynchronous async-await

5
推荐指数
1
解决办法
504
查看次数

标签 统计

.net ×1

aop ×1

async-await ×1

asynchronous ×1

c# ×1