本主题提供如何设置返回数据的示例。 如有自定义返回数据,请使用提供程序和自定义方法来支持它,以便可以检索所创建的数据。
// Provider Callback
[](XAsyncOp op, const XAsyncProviderData* providerData)
{
switch(op)
{
case XAsyncOp::GetResult:
memcpy(providerData->buffer, &context->result, sizeof(uint64_t));
break;
case XAsyncOp::DoWork:
context->result = 12345678;
XAsyncComplete(providerData->async, S_OK, sizeof(uint64_t));
break;
// Other cases..
}
}
如安装示例中所述,提供程序必须首先通过在 XAsyncComplete 中指定缓冲区大小并在 GetResult 用例中填写来添加对返回数据的支持。 添加支持之后,添加方法来检索调用者的结果。
HRESULT CustomProviderMethodAsyncResult(XAsyncBlock* async, uint64_t* outResult)
{
return XAsyncGetResult(async, CustomProviderMethodAsync,
sizeof(uint64_t), outResult, nullptr);
}
可以调用 XAsyncGetResult,但是前面的方法会在自定义提供程序方法之间创建可读的匹配。 它会自动转换为异步结果所需的数据类型。 也可在任何完成回调中使用此方法从工作中收集结果,而不会产生任何风险。
另请参阅
XAsyncProvider 库概述
设置自定义提供程序示例(示例)
设置调用方法(示例)
设置可取消性的示例(示例)
XAsyncProvider