如何为IAsyncOperation指定回调方法

时间:2013-03-22 14:23:35

标签: c++ asynchronous windows-runtime windows-phone-8

是否可以在完成async操作后指定要调用的方法?

平台:C ++,Windows Phone 8

我需要实现非阻塞方法来异步发送UDP数据包。他们有我的方法:

onWriteComplete(int errorCode)

在操作完成时回调。

以下是我尝试的内容:

res = await asyncWrite();
onWriteComplete( res );

但没有运气。

1 个答案:

答案 0 :(得分:4)

异步操作在Windows Phone 8和Windows RT应用程序中以相似的方式在所有语言中工作。异步操作返回一个IAsyncOperation结果,您可以使用该结果链接一个在操作完成时运行的函数。

在C ++中,您可以使用create_tasktask::then函数创建任务并以类似于C#的方式链接它们。请查看Asynchronous Programming in C++ (Windows Store Apps)以获取示例。

该示例从IAsyncOperation结果创建任务,并安排在第一个任务完成时执行的另一个任务:

auto deviceEnumTask = create_task(deviceOp);

// Call the task’s .then member function, and provide
// the lambda to be invoked when the async operation completes.
deviceEnumTask.then( [this] (DeviceInformationCollection^ devices ) 
{       
    for(int i = 0; i < devices->Size; i++)
    {
        DeviceInformation^ di = devices->GetAt(i);
        // Do something with di...          
    }       
}); // end lambda