Я пытаюсь понять синтаксис параллелизма :: 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
}
});
}
getFileOperation
это объект, который будет возвращать StorageFile^
(или ошибка) в какой-то момент в будущем. Это C ++ task<t>
обертка вокруг WinRT IAsyncOperation<T>
объект вернулся из GetFileAsync
,
Реализация GetFileAsync
может (но не обязан) выполнять в другом потоке, позволяя вызывающему потоку продолжать выполнять другую работу (например, анимацию пользовательского интерфейса или реагирование на ввод пользователя).
then
Метод позволяет передавать функцию продолжения, которая будет вызываться после завершения асинхронной операции. В этом случае вы передаете лямбду (встроенную анонимную функцию), которая определяется []
квадратные скобки, за которыми следует список параметров лямбда ( StorageFile^
объект, который будет возвращен GetFileAsync
), а затем функции тела. Это тело функции будет выполнено, как только GetFileAsync
операция завершает свою работу когда-нибудь в будущем.
Код внутри функции продолжения передается then
обычно (но не всегда) выполняется после код, который следует за призывом к create_task()
(или в вашем случае task
конструктор).