Проанализировать API Concurncy :: Task () & amp; Почему нам это надо?

Я пытаюсь понять синтаксис параллелизма :: task в приведенном ниже фрагменте кода.

Я не могу понять этот синтаксис кода.
Как мы анализируем это:

Что такое «getFileOperation» здесь. Это объект типа StorageFile
учебный класс ? Что здесь означает ключевое слово «тогда»? Есть «{» после
затем(….)? Я не могу проанализировать этот синтаксис?

Кроме того, зачем нам этот параллелизм :: task (). Then () .. Вариант использования?

concurrency::task<Windows::Storage::StorageFile^> getFileOperation(installFolder->GetFileAsync("images\\test.png"));
getFileOperation.then([](Windows::Storage::StorageFile^ file)
{
if (file != nullptr)
{

Взято из MSDN параллелизм :: API задач

void MainPage::DefaultLaunch()
{
auto installFolder = Windows::ApplicationModel::Package::Current->InstalledLocation;

concurrency::task<Windows::Storage::StorageFile^> getFileOperation(installFolder->GetFileAsync("images\\test.png"));
getFileOperation.then([](Windows::Storage::StorageFile^ file)
{
if (file != nullptr)
{
// Set the option to show the picker
auto launchOptions = ref new Windows::System::LauncherOptions();
launchOptions->DisplayApplicationPicker = true;

// Launch the retrieved file
concurrency::task<bool> launchFileOperation(Windows::System::Launcher::LaunchFileAsync(file, launchOptions));
launchFileOperation.then([](bool success)
{
if (success)
{
// File launched
}
else
{
// File launch failed
}
});
}
else
{
// Could not find file
}
});
}

0

Решение

getFileOperation это объект, который будет возвращать StorageFile^ (или ошибка) в какой-то момент в будущем. Это C ++ task<t> обертка вокруг WinRT IAsyncOperation<T> объект вернулся из GetFileAsync,

Реализация GetFileAsync может (но не обязан) выполнять в другом потоке, позволяя вызывающему потоку продолжать выполнять другую работу (например, анимацию пользовательского интерфейса или реагирование на ввод пользователя).

then Метод позволяет передавать функцию продолжения, которая будет вызываться после завершения асинхронной операции. В этом случае вы передаете лямбду (встроенную анонимную функцию), которая определяется [] квадратные скобки, за которыми следует список параметров лямбда ( StorageFile^объект, который будет возвращен GetFileAsync), а затем функции тела. Это тело функции будет выполнено, как только GetFileAsync операция завершает свою работу когда-нибудь в будущем.

Код внутри функции продолжения передается then обычно (но не всегда) выполняется после код, который следует за призывом к create_task() (или в вашем случае task конструктор).

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector