宣言したメソッド内で 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>': 式としてのこの型の不正な使用、およびこれら 2 つに続くエラーと思われるいくつかのエラーがスローされます。 .
要約すると、非同期タスクが完了した後にメソッドを返す方法を教えてください。これにより、非同期で行われている処理に基づいて意味のある結果を返すことができます。