私は Windows ストア (C++) アプリに取り組んでいます。Webサービスを利用してデータベースから読み込む方法です。
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());
});
GetFromDB() から返されたデータを受信しようとすると、常に COM 例外が発生します。しかし、これはうまくいきます:
ternet.GetFromDB(cancellationTokenSource.get_token());
GetFromDB の完了を他のコードにチェーンするより良い方法を提案してください。そして、 GetFromDB() の try{} ブロック内から戻り値を取得する方法。私は非同期プログラミングの非常に新しい学生であることを覚えておいてください。