Как использовать статические методы/классы в операциях async/wait? - программирование
Подтвердить что ты не робот

Как использовать статические методы/классы в операциях async/wait?

Это мой подход не использовать статические методы и классы в асинхронных операциях - если не используется некоторая технология блокировки для предотвращения условий гонки.

Теперь в структуру С# 4.5+ добавлен async/await, что упрощает многопоточные приложения и поощряет гибкий интерфейс.

Однако - поскольку блокировка не может/не должна быть помещена над ожидающим способом (и я не обсуждаю это), делает ли это теперь статические методы, использующие async/wait полностью избыточным?

4b9b3361

Ответ 1

Это мой подход не использовать статические методы и классы в асинхронных операциях - если не используется некоторая технология блокировки для предотвращения условий гонки.

Почему? Если вы не используете общее состояние, не должно быть никаких условий гонки. Например, рассмотрим:

public static async Task<int> GetPageLength(string url)
{
    string text = await new WebClient().DownloadStringTaskAsync(url);
    return text.Length;
}

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