设置返回数据示例

本主题提供如何设置返回数据的示例。 如有自定义返回数据,请使用提供程序和自定义方法来支持它,以便可以检索所创建的数据。

// 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