我需要在我声明的方法中调用 Async 方法。该方法应该返回一个值。我正在尝试将对 Windows 应用商店的调用包装到一个易于使用的类中。我的方法应该是这样的:
bool Purchase(enum_InAppOption optionToPurchase);
enum_InAppOption
是一个枚举,包含所有要购买的应用内选项。在某些时候我需要打电话RequestProductPurchaseAsync
。此调用的结果确定该方法是否应返回true
或false
。我是 c++/cx 的新手(或者至少从现在到上次使用 c++ 之间我有很长的历史),所以也许这比我想的更容易。
create_task
看起来像这样:
create_task(CurrentAppSimulator::RequestProductPurchaseAsync(this->_LastProductId, false))
我考虑/尝试的选项:
返回任务不会抽象商店
试图调用等待任务。我有例外
An invalid parameter was passed to a function that considers invalid parameters fatal.
尝试使用
structured_task_group
,但似乎这不允许非 void 返回方法,或者我试图提供错误的解释。编译器返回错误 C2064(谷歌搜索但我不明白要更改什么)使用一系列任务和
when_all
在页面中间的http://msdn.microsoft.com/en-us/library/dd492427.aspx#when_all上找到以下代码:
array<task<void>, 3> tasks =
{
create_task([] { wcout << L"Hello from taskA." << endl; }),
create_task([] { wcout << L"Hello from taskB." << endl; }),
create_task([] { wcout << L"Hello from taskC." << endl; })
};
auto joinTask = when_all(begin(tasks), end(tasks));
// Print a message from the joining thread.
wcout << L"Hello from the joining thread." << endl;
// Wait for the tasks to finish.
joinTask.wait();
所以我试着把它翻译成下面的代码:
array<task<Platform::String^>,1> tasks = {
create_task(CurrentAppSimulator::RequestProductPurchaseAsync(this->_LastProductId, false))
};
即使我包括编译器抛出 C2065('array':未声明的标识符),C2275('Concurrency::task<_ReturnType>':非法使用这种类型作为表达式和一些错误似乎是跟进这两个错误.
总结一下:如何在异步任务完成后让方法返回,这样我就可以根据异步进行的东西返回有意义的结果?