C# 使用CodeMemberMethod创建异步方法
如何使用C# 使用CodeMemberMethod创建异步方法,c#,template-meta-programming,codedom,C#,Template Meta Programming,Codedom,如何使用CodeDom.codembermethod使用async装饰方法签名 因此,我希望: public async Task SomeMethodAsync() { } 没有办法做到这一点。我最终使用了regex public static class GenCodeParser { private const string AsyncKeyWordPattern = @"(?<=public class DynamicClass(\r\n)*\s*{(\r\
CodeDom.codembermethod
使用async
装饰方法签名
因此,我希望:
public async Task SomeMethodAsync()
{
}
没有办法做到这一点。我最终使用了regex
public static class GenCodeParser
{
private const string AsyncKeyWordPattern = @"(?<=public class DynamicClass(\r\n)*\s*{(\r\n)*\s*public)(?=.*\s*SomeMethodAsync{1})";
private const string AsyncKeyWordReplacementPattern = @" async ";
public static string AddAsyncKeyWordToMethodDeclaration(string sourceCode)
{
if (string.IsNullOrWhiteSpace(sourceCode)) return null;
try
{
var regex = new Regex(AsyncKeyWordPattern);
return regex.Replace(sourceCode, AsyncKeyWordReplacementPattern);
}
catch
{
return null;
}
}
}
公共静态类GenCodeParser
{
私有常量字符串AsyncKeyWordPattern=@”(?CodeDOM对async
一无所知,因此没有直接的方法将其添加到您的方法中。但它对您编写的内容也相当宽容
因此,您可以编写一个返回类型为async Task
的方法。当然,这不是一个有效的类型,但是如果您将该字符串写入返回类型通常所在的位置,您将得到所需的结果
例如:
new CodeMemberMethod
{ Name = "M", ReturnType = new CodeTypeReference("async Task") }
汇编成:
private async Task M() {
}
看来你已经找到了解决办法,你应该把它作为答案贴出来,然后你就可以接受了。