如何使用async
CodeDom.CodeMemberMethod
方法签名?
我希望得到结果:
public async Task SomeMethodAsync()
{
}
CodeDom无法做到这一点。我最终使用了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;
}
}
}
答案 0 :(得分:3)
CodeDOM对async
一无所知,因此没有直接的方法将其添加到您的方法中。但它对你写作的内容也很宽容。
因此,您可以做的是编写一个返回类型为async Task
的方法。当然这不是一个有效的类型,但是如果你把那个字符串写到返回类型通常所在的位置,你就会得到想要的东西。
例如:
new CodeMemberMethod
{ Name = "M", ReturnType = new CodeTypeReference("async Task") }
编译成:
private async Task M() {
}