【发布时间】:2019-03-26 22:30:05
【问题描述】:
我有一个使用部分方法生成的代码
{
...
partial void InterceptOperationCall(IOperationContext context);
...
async Task SomeMethod()
{
InterceptOperationCall(cntx);
await LongOperation(cntx);
}
}
手写部分
{
partial void InterceptOperationCall(IOperationContext context)
{
}
}
我需要在InterceptOperationCall 内部进行异步调用有没有人知道一些解决部分方法限制的方法?
换句话: 我想异步执行 InterceptOperationCall 并保证在长时间操作之前,同时我想在另一个文件中可选地声明此方法的主体。
UPD 作为我选择的解决方案:
- 不使用生成的部分方法存根,并使用动态代理 (
Castle.DynamicProxy) 进行包装并使用AsyncInterceptorBase来自 (Nito.AsyncEx) - 我看到的另一个选项是重写代码生成器
我一直在寻找更好的解决方案的任何方式,如果有人知道另一种方法来提供可选的能力来使用 somoe 异步逻辑包装异步调用,请帮助我。
【问题讨论】:
-
如果你想要异步部分方法的限制可以在文档中找到它们。但是,如果您需要解决部分方法限制,则需要提供更多信息。
-
@Llazar,感谢关注,我添加了我的问题的一些细节,你能告诉你需要什么信息吗?
-
@gabba 是您希望能够等待分部方法还是能够使用分部方法调用可等待函数?显示的示例是
void方法,所以我要求澄清。 -
如果重写代码生成器是一种选择,那么我建议重写它以更符合 async-await API。
-
@Nkosi,你能提供一些样品或提供一个想法吗?
标签: c# asynchronous auto-generate