В настоящее время я работаю над проектом по созданию интеграции между существующим веб-сайтом ASP.Net MVC и службой хостинга файлов, которую использует моя компания.Типичный вариант использования:
- Пользователь запрашивает один или несколько файлов
- Контроллер выполняет один вызов на файл для API файлового хоста
- Хост файла возвращаетданные файла в контроллер
- Контроллер возвращает результат файла
Служба хостинга может обрабатывать параллельные вызовы, и я обнаружил, что выполнение каждого вызова API внутри задачи (см.пример ниже) приводит к довольно резким улучшениям.
private void RetrieveDocuments(DocumentIdentifier[] identifiers, List<FileHostResult> results)
{
var tasks = identifiers.Select(x => RetrieveDocument(results, x)).ToArray();
Task.WaitAll(tasks);
}
private Task RetrieveDocument(List<FileHostResult> results, DocumentIdentifier x)
{
return Task.Run(() =>
{
var result = GetFileHostResultFromFileHost(x.ExternalIdentifier);
lock (results)
{
results.Add(result);
}
});
}
Мой вопрос заключается в том, есть ли лучший способ сделать это или есть какие-нибудь потенциальные ловушки, с которыми я могу столкнуться?(например, блокировка ресурсов сервера и т. д.).
РЕДАКТИРОВАТЬ 1: Я не опубликовал код для GetFileHostResultFromFileHost, потому что у меня нет прав для его изменения.В основном это вызов метода, реализованный в библиотеке, который я не могу изменить.
РЕДАКТИРОВАТЬ 2: Чтобы уточнить.Моя главная задача - не наносить вред текущему опыту пользователей на сайте.В связи с этим я хочу убедиться, что одновременное выполнение задач из ASP.net mvc не приведет к блокировке сайта.