如何使部分方法异步

gab*_*bba 10 c# asynchronous auto-generate

我有部分方法生成的代码

{
    ...
    partial void InterceptOperationCall(IOperationContext context);
    ...

    async Task SomeMethod()
    {
        InterceptOperationCall(cntx);
        await LongOperation(cntx);
    }
}
Run Code Online (Sandbox Code Playgroud)

和handwrited部分

{
    partial void InterceptOperationCall(IOperationContext context)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要在内部执行异步调用InterceptOperationCall是否有人知道某种方法来解决部分方法限制?

换句话说: 我想在长时间操作之前异步进行InterceptOperationCall并保证,同时我想在另一个文件中声明这个方法的主体.

UPD作为解决方案解决方案我选择:

  • 不使用生成的部分方法存根,并使用动态代理(Castle.DynamicProxy)进行包装并使用AsyncInterceptorBasefrom(Nito.AsyncEx)进行拦截
  • 另一种选择我看到重写代码生成器

一直在寻找更好的解决方案,如果有人知道另一种提供可选功能的方法,用somoe异步逻辑包装异步调用,请帮助我.

Pet*_*der 1

实现部分方法时可以使用 async 关键字。

所以

async partial void InterceptOperationCall(IOperationContext context) {

}
Run Code Online (Sandbox Code Playgroud)

应该没有问题。

  • 在不知道相关代码的上下文(没有双关语)的情况下,您可以安全地建议“async void”吗? (4认同)
  • @gabba 当然,您返回 `async Task` 而不是 async void (现在您看到部分类和异步方法的问题)。您可能需要重新考虑您的设计,不再使用部分类。 (2认同)