deepaksharma0390 Ответов: 1

Создание фоновых очереди загрузки задач в Windows 8.1 приложения магазина


Я работаю над приложением магазина Windows 8.1.

У меня есть задача загрузки, которая загружает файл в фоновом режиме с Google Диска.

Может ли кто-нибудь помочь мне с любыми указателями, как я могу создавать очереди задач загрузки и, возможно, получать ход выполнения задач загрузки и отображать его на какой-то странице, пока задачи выполняются в фоновом режиме.

Ценю любую помощь.

Спасибо,
Дипак

Что я уже пробовал:

public static void StartDownload(DriveService service, File file)
{
	Task.Run(async () => await DownloadFile(service, file));
}


public static async Task<IDownloadProgress> DownloadFile(DriveService service, File file)
{
    var request = service.Files.Get(file.Id);
    var stream = new MemoryStream();
    IDownloadProgress progress = null;
    if (file.MimeType != "application/vnd.google-apps.folder")
    {
        progress = await request.DownloadAsync(stream, CancellationToken.None);
        SaveToLocalFolderAsync(stream, file.Name);
    }
    return progress;
}

1 Ответов

Рейтинг:
8

Afzaal Ahmad Zeeshan

Я действительно видел все ваши комментарии к моему ответу на ваш предыдущий вопрос, к сожалению, система не поддерживает комментарии и т. д.

Самый простой метод, если вам просто нужно контролировать, когда все фоновые задачи закончатся, вы можете использовать Task.WhenAll() или Task.WaitAll() (вы не можете ждать пустоты), вы можете ждать этих вызовов для асинхронного подхода.

// for a generic approach;
var downloads = new List<Task>();

// Add new ones to collection, 
downloads.Add(Task.Run(() => {
   // code.
}));

// You can add them in a loop, or private function, handler etc.

Тогда ожидание их всех будет подобно,
Task.WhenAll(downloads.ToArray()); // waits

Чтобы проверить прогресс, вы можете запустить логику, чтобы увидеть, сколько файлов было загружено, какова скорость и т. д. Это немного алгоритмический. Ипрогресс[^] интерфейс можно использовать для настройки прогресса, но только в том случае, если вам это нужно.

Для получения более подробного обзора прочтите Класс Задач (System.Нарезание резьбы.Задачи)[^].
Задача-асинхронная модель, основанная (нажмите)[^]
Задача.Метод WhenAll (Task []) (System.Нарезание резьбы.Задачи)[^]

Просто обзор 1000 футов здесь, c# - проверка хода выполнения операции загрузки, запущенной в фоновой задаче-переполнение стека[^]

Для большего контроля над этим вам нужно будет использовать Thread (которые не так удобны, как Task), но дает больше контроля.


deepaksharma0390

Есть ли способ получить список запущенных задач ? Я пытаюсь получить список задач на странице 2, которые я запустил с помощью

Task.Run
в то время как я запускал эти задачи со страницы 1.
Есть ли какой-нибудь контекст, который я могу использовать, чтобы получить то же самое ?
Спасибо

Afzaal Ahmad Zeeshan

Вы можете добавить их в коллекцию на статическом общем объекте, доступ к которому можно получить на любой странице, а затем передать их туда. Какое у вас есть приложение? Попробуйте завести там отдельный класс.

deepaksharma0390

Это приложение Windows 8.1 UWP.

Afzaal Ahmad Zeeshan

Затем храните его под App объект вашего приложения. Создайте статическое свойство для хранения List<Task> объекты.

deepaksharma0390

Большое спасибо за понимание. Я так не думал. Позвольте мне попробовать и посмотреть.
Спасибо