小编use*_*899的帖子

用于识别异步方法的表达式会导致编译器警告

我正在使用表达式来标识类中的特定方法,并返回该方法的属性。当方法是异步的时,编译器会警告我应该等待该方法。

有没有其他方法可以识别该方法,或者有什么方法可以在不使用 pragma 的情况下抑制警告?我不想使用字符串来标识该方法。

Resharper 建议使用 async/await,但是 async lambda 表达式不能转换为表达式树。

其他答案是任务的扩展方法,但是我将无法获得具有该属性的方法。

示例代码:

class Program
{
    static void Main(string[] args)
    {
        var attributeProvider = new AttributeProvider();
        var attributeText = attributeProvider.GetAttribute<Program>(
            p => p.MethodA()); //Warning: Because this call is not awaited, ...
    }

    [Text("text")]
    public async Task<string> MethodA()
    {
        return await Task.FromResult("");
    }
}

public class AttributeProvider
{
    public string GetAttribute<T>(Expression<Action<T>> method)
    {
        var expr =(MethodCallExpression) method.Body;

        var attribute = (TextAttribute)Attribute.GetCustomAttribute(
            expr.Method, typeof(TextAttribute));

        return attribute.Text;
    }
}

public class TextAttribute : Attribute …
Run Code Online (Sandbox Code Playgroud)

c# expression asynchronous

5
推荐指数
1
解决办法
462
查看次数

标签 统计

asynchronous ×1

c# ×1

expression ×1