Я использую выражение для определения конкретного метода в классе и возврата атрибута метода.Когда метод асинхронный, компилятор выдает мне предупреждение о том, что метод следует ожидать.
Есть ли другие способы, которыми я мог бы идентифицировать метод, или любой способ подавить предупреждение, не используя прагму?Я не хотел бы использовать строку для идентификации метода.
Resharper предлагает async / await, но асинхронное лямбда-выражение не может быть преобразовано в деревья выражений.
Другие ответы - методы расширения для задачи,но тогда я не смог бы получить метод с атрибутом.
Пример кода:
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
{
public string Text { get; set; }
public TextAttribute(string text)
{
Text = text;
}
}