Как избежать предупреждений для имен методов HandleAsync агрегатора микро-событий Caliburn?

#c# #wpf #visual-studio #caliburn.micro

Вопрос:

Моя проблема просто в том, что если я использую агрегатор событий Caliburn Micro и реализую интерфейс «IHandle», то это создает метод, называемый «HandleAsync(сообщение MyEvent, токен CancelleationToken)».

Моя проблема в том, что обычно эти методы не являются асинхронными и не нуждаются в пометке «асинхронность» или возврате задачи, поэтому на самом деле не должны иметь «Асинхронность» в конце, поскольку они не являются асинхронными методами, и вызывает предупреждение в Visual Studio.

Это не вызывает у меня никаких технических проблем, просто раздражает неправильное название методов, просто чтобы соблюдать интерфейс Caliburn Micro для методов подписки на агрегатор событий.

Простой вопрос заключается в том, как удалить асинхронность в конце имени метода или иным образом избавиться от этих предупреждений?

Спасибо

Гарри

Комментарии:

1. Как именно выглядит предупреждение?

2. Visual Studio предупреждает CS1998, в основном проблема со стилем, из-за которой у вас не должно быть «асинхронности» в конце имен методов для методов, которые не являются асинхронными, и многие методы агрегатора событий таковыми не являются, это простые вызовы для обновления списка или чего-то еще.

Ответ №1:

К сожалению, это невозможно при нынешней реализации EventAggregator in Caliburn Micro.

Если бы вы проверили реализацию EventAggregator в репозитории github, вы бы заметили, что он ищет метод с определенным именем.

 var interfaces = handler.GetType().GetTypeInfo().ImplementedInterfaces
                    .Where(x => x.GetTypeInfo().IsGenericType amp;amp; x.GetGenericTypeDefinition() == typeof(IHandle<>));

foreach (var @interface in interfaces)
{
  var type = @interface.GetTypeInfo().GenericTypeArguments[0];
  var method = @interface.GetRuntimeMethod("HandleAsync", new[] { type, typeof(CancellationToken) });

  if (method != null)
  {
    _supportedHandlers[type] = method;
  }
}
 

Одной из альтернатив было бы реализовать вашу собственную версию IEventAggregator и ввести два интерфейса IHandle<T> , а IHandleWithTask<T> также представить синхронный и асинхронный варианты.

Комментарии:

1. Это то, чего я ожидал, возможно, здесь можно реализовать мой собственный вариант. Спасибо.

Ответ №2:

Вы должны быть в состоянии подавить предупреждение в своем исходном коде.

Щелкните правой кнопкой мыши на нем в списке ошибок и выберите Подавить->В источнике или Подавить->>В файле подавления в зависимости от того, куда вы хотите вставить директиву>> #pragma .

Комментарии:

1. Спасибо, я надеялся найти способ действительно устранить проблему, а не подавлять предупреждение, на самом деле это просто одна из тех вещей, которые заводят меня, а не реальная техническая проблема.