Я знаю, что этот вопрос был представлен несколько раз, но последние ответы датируются, и я задаюсь вопросом, будет ли доступно решение сегодня? Это не запрос функции. Я скорее ищу любое обходное решение, которое сработает.C# RestSharp Library - отчет Прогресс при загрузке большого «потока приложений/octect»
Я использую RestSharp на клиенте, который говорит с моим API. API отвечает с помощью «application/octect-stream», который может занять до нескольких минут. Ссылка на GitHub code here.
public void Download()
{
if (NewerApp == null) return;
var client = new RestClient(ServerAddress);
var request = new RestRequest("/Apps/", Method.POST);
request.AddParameter("id", CurrentApp.EncryptedId());
request.AddParameter("action", "download");
var asyncHandle = client.ExecuteAsync<App>(request, response => {
HandleResponseToDownloadRequest(response);
});
}
Мне нужно сообщить о ходе приема «ответа» на мой пользовательский интерфейс, чтобы создать индикатор выполнения или что-то в этом роде. Я уже знаю ожидаемый объем данных, которые будут получены (через предыдущий ответ API), мне просто нужно было бы знать, сколько байтов было получено до получения и анализа полного ответа.
Я не верю, что RestSharp в настоящее время предлагает тип отчета о прогрессе, не так ли? Я вижу несколько подходов:
- Использование client.DownloadData (request) .SaveAs (путь);. Возможно, файл создается во время его загрузки. Я мог бы прочитать размер файла, чтобы сообщить о ходе загрузки. Но мое первое впечатление заключается в том, что клиент сначала загружает данные, а затем сохраняет файл. В этом случае это не помогло бы.
- Использование потока для загрузки ответа. Регулярно оценивайте размер потока или каждый раз, когда размер буфера расширяется.
- Измените тип ответа от API на другой (отправьте данные в JSON, например?).
- Любой другой вариант?
Что вы думаете? Кто-нибудь смог сообщить о ходе загрузки?
Могу ли я получить доступ к RawBytes из «ответа», пока ExecuteAsync все еще выполняется? Должен ли я использовать Execute (без Asyn) вместо этого? Должен ли я использовать поток и обновление смотреть размер потока при регулярных обновлениях?