Как получить Visual Studio Intellisense, чтобы рекомендовать Async вариант метода - PullRequest
3 голосов
/ 20 сентября 2019

Как разработчик библиотеки, я часто создаю методы Async и Non-Async, когда это имеет смысл.Однако я обнаружил, что часто разработчик, потребляющий мою библиотеку, будет использовать неасинхронный метод, находясь внутри уже асинхронного метода.

Как я могу получить Visual Studio (или, может быть, более резкий ???) дляРазработчик, что существует версия Async, и что это рекомендуется в этой ситуации?Я надеюсь, что есть атрибут, который я могу поставить на методы.

Пример:

public async Task DoSomething()
{
    var result = MyLibrary.Run(variable); // <- this should be var result = await MyLibrary.RunAsync(variable, cancelationToken);

    var businessLogicResult =  doBusinessLogicOnResult(result);

    await someHttpCallThatIsAsync(businessLogicResult);
}

Ответы [ 2 ]

2 голосов
/ 20 сентября 2019

Вы можете создать анализаторы Roslyn для своей библиотеки.

Начните здесь: Начало работы с анализаторами Roslyn

Если вы хотите увидеть примеры, этохороший ресурс: Microsoft.CodeAnalysis.FxCopAnalyzers

1 голос
/ 20 сентября 2019

Анализаторы кода (также известные как Roslyn Analyzers) - это путь.Можно написать свое собственное, специально для того, как вы ожидаете, что люди будут использовать вашу библиотеку.Вы можете добавить их в качестве зависимости для вашей библиотеки, чтобы они автоматически включались при каждом использовании вашей библиотеки.Это дало бы вам большую гибкость, но потребовало бы больше работы, чем просто добавление атрибута в ваш код.

В качестве альтернативы вы могли бы порекомендовать людям использовать набор анализаторов более общего назначения (например, Microsoft.VisualStudio.Threading.Analyzers имеет " Вызов асинхронных методов в асинхронном методе ", что звучит так, как вы собираетесь).Вы даже можете напрямую зависеть от этой библиотеки анализаторов, но вам придется подумать о том, как ваши потребители будут относиться к вашей библиотеке, заставляя их получать ошибки анализатора для других несвязанных частей их кода.И хотя обычно рекомендуется использовать асинхронные методы, когда это возможно, в некоторых случаях вы этого не хотите.Entity Framework имеет некоторые серьезные снижения производительности при использовании ToListAsync(), если вы читаете большие значения столбца, например, nvarchar(max).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...