Я работаю над приложением Windows Store (C++). Это метод, который читается из базы данных с помощью веб-службы.Цепочка завершения функции async для другого
task<std::wstring> Ternet::GetFromDB(cancellation_token cancellationToken)
{
uriString = ref new String(L"http://myHost:1234/RestServiceImpl.svc/attempt");
auto uri = ref new Windows::Foundation::Uri(Helpers::Trim(uriString));
cancellationTokenSource = cancellation_token_source();
return httpRequest.GetAsync(uri, cancellationTokenSource.get_token()).then([this](task<std::wstring> response)->std::wstring
{
try
{
Windows::UI::Popups::MessageDialog wMsg(ref new String(response.get().c_str()), "success");
wMsg.ShowAsync();
return response.get();
}
catch (const task_canceled&)
{
Windows::UI::Popups::MessageDialog wMsg("Couldn't load content. Check internet connectivity.", "Error");
wMsg.ShowAsync();
std::wstring abc;
return abc;
}
catch (Exception^ ex)
{
Windows::UI::Popups::MessageDialog wMsg("Couldn't load content. Check internet connectivity.", "Error");
wMsg.ShowAsync();
std::wstring abc;
return abc;
}
} , task_continuation_context::use_current());
}
Я смущен, как вернуть полученные данные вызывающей функции. Теперь я называю эту функцию в конструкторе моего класса данных, как это:
ternet.GetFromDB(cancellationTokenSource.get_token()).then([this](task<std::wstring> response)
{
data = ref new String(response.get().c_str());
});
Я получаю COM исключение всякий раз, когда я пытаюсь получить возвращаемые данные из GetFromDB(). Но это один работает нормально:
ternet.GetFromDB(cancellationTokenSource.get_token());
Пожалуйста, предложите лучший способ сцепления завершения GetFromDB с другим кодом. И как получить возвращаемое значение из блока try {} GetFromDB(). Пожалуйста, имейте в виду, что я очень новый ученик асинхронного программирования.
Опять же, реальный код ошибки исключения был бы полезен. –
Вы можете обернуть вызов .get() в 'try {/*...*/} catch (Platform :: Exception^e) { Платформа :: String^s = e-> Сообщение; }, а затем установить контрольную точку и проверить «s», чтобы получить дополнительную информацию об исключении. –