Библиотеки классов.Net: ответственность за многопоточность
Я работаю над библиотекой классов, и один из классов отвечает за получение файла XML с помощью XDocument.Load(url)
из Интернета. Поскольку выполнение этой операции может занять несколько секунд, имеет смысл запускать ее в своем собственном потоке.
Кто несет ответственность за создание этой темы? Потребитель или класс, который извлекает файл? Есть ли лучшая практика по этому поводу?
2 ответа
Лучше всего реализовать асинхронный шаблон. Это означает, что если у вашего класса есть LoadXml
метод вы также реализуете LoadXmlAsync
метод и какой-то OnCompleted
событие.
Вы можете прочитать об этом здесь
Я думаю, что оба варианта хороши. Это также зависит от того, сколько мест вы бы использовали этот метод для получения данных. Если он используется в нескольких местах, то было бы разумно организовать потоки в классе, который извлекает файл.
Я лично выбрал бы последний, потому что это дало бы мне больше гибкости, если бы мне нужно было использовать его в большем количестве мест (возможно, позже).
Размышляя над этим вопросом, на ум пришли методы с префиксом BeginDoSomeOperation и EndDoSomeOperation, которые дадут еще немного кредитов последнему варианту.