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() {
}

看来你已经找到了解决办法,你应该把它作为答案贴出来,然后你就可以接受了。