Родительский объект и большинство детей имеют асинхронный режим и используют ожидание.StyleCop наблюдает и бросает вызов отсутствию ожидания в одном дочернем классе.
Каков наилучший способ сделать StyleCop счастливым, если вы не можете удалить асинхронную подпись?
Например:
class Program
{
static void Main(string[] args)
{
var t = DownloadSomethingAsync();
Console.WriteLine(t.Result);
}
public delegate Task<string> TheDelegate(string page);
static async Task<string> DownloadSomethingAsync()
{
string page = "http://en.wikipedia.org/";
var content = await GetPageContentAsync(page);
return content;
}
static async Task<string> GetPageContentAsync(string page)
{
string result;
TheDelegate getContent = GetNotOrgContentAsync;
if (page.EndsWith(".org"))
{
getContent = GetOrgContentAsync;
}
result = await getContent(page);
return result;
}
static async Task<string> GetOrgContentAsync(string page)
{
string result;
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = await client.GetAsync(page))
using (HttpContent content = response.Content)
{
result = await content.ReadAsStringAsync();
}
return result;
}
static async Task<string> GetNotOrgContentAsync(string page)
{
return await Task.FromResult("Do not crawl these");
// removing async will cause "Cannot implicitly convert type 'string' to 'System.Threading.Tasks.Task<string>'
}
}
Нашел решение - создав его для поиска в Google, чтобы найти easilly.
Вы также можете использовать подавление предупреждений, как упомянуто здесь: Подавить предупреждение от пустого асинхронного метода
// редактировать, чтобы удалить дискуссию о ведении журнала, о которой вопрос не имел никакого отношения и был только для примера.
// изменить, чтобы принудительно потребовалась асинхронность, потому что это сбило с толку людей