Ответ 1
Это мой подход не использовать статические методы и классы в асинхронных операциях - если не используется некоторая технология блокировки для предотвращения условий гонки.
Почему? Если вы не используете общее состояние, не должно быть никаких условий гонки. Например, рассмотрим:
public static async Task<int> GetPageLength(string url)
{
string text = await new WebClient().DownloadStringTaskAsync(url);
return text.Length;
}
Если у вас есть общее состояние - или если вы используете метод экземпляра для экземпляра, который используется несколькими потоками, вам нужно выяснить, как вы в идеале хотите, чтобы ваша асинхронная операция работала. Как только вы решите, как должны себя вести различные расы, на самом деле их реализация может быть довольно простой.