【windows8开发】异步编程之Concurrency::create_async(C++)
2012-04-24 11:36
369 查看
前文中提到过,Concurrency::task支持异步处理,但是由于它不支持跟其他语言的交互,所以如果希望开发的组件能在其他语言,比如C#,Javascript,VB中使用的话,就需要多语言交互的API,它就是Concurrency::create_async。
我们把Concurrency::task和Concurrency::create_async两种处理方式对照来看。
如果我们的组件本身以及调用方都只可能是C++的话,我们会使用Concurrency::task来实现异步处理。因为它更直接,所以效率也更高。假设也许我们会设计如下这样的异步处理方法:
那么反之,如果组件会在C++之外的语言中使用,我们就应该使用Concurrency::create_async方法,所以上面使用Concurrency::task的处理我们会改为使用Concurrency::create_async:
是不是有点难理解,让我来解释下上面的异步处理方式吧。
WinRT提供了4种异步处理的接口方式,
1. Windows::Foundation::IAsyncAction :
无返回值,无处理进度报告
2. Windows::Foundation::IAsyncActionWithProgress<TProgress>:无返回值,有处理进度报告
3. Windows::Foundation::IAsyncOperation<TResult>:有返回值,无处理进度报告
4. Windows::Foundation::IAsyncOperationWithProgress<TResult,
TProgress>:有返回值,有处理进度报告
而Concurrency::create_async方法的参数是个Lambda表达式,也就是匿名函数指针。而create_async能根据Lambda表达式中的参数和返回值来决定4种接口中的一种作为返回类型。现在可以看出上面的异步处理中,create_async参数Lambda表达式(匿名函数)是无参数的,所以它就是无处理进度报告的,而Lambda表达式的返回值类型为IVector<int>^,所以create_async就是有返回值得。综合来看上述异步处理就应该是有返回值,无处理进度报告对应的IAsyncOperation<TResult>。
如果想参照create_async的使用实例,可以参考这篇这篇文章中,其中就有返回值为IAsyncOperationWithProgress<TResult,
TProgress>的实例。
《【windows8开发】C++开发WinRT组件和JS调用》
我们把Concurrency::task和Concurrency::create_async两种处理方式对照来看。
如果我们的组件本身以及调用方都只可能是C++的话,我们会使用Concurrency::task来实现异步处理。因为它更直接,所以效率也更高。假设也许我们会设计如下这样的异步处理方法:
Concurrency::task<vector<int>> GetFileContentAsync() { return Concurrency::task<vector<int>>([]() { // 异步处理 }); }Concurrency::task的说明请参照《【windows8开发】异步编程之Concurrency::task(C++)》
那么反之,如果组件会在C++之外的语言中使用,我们就应该使用Concurrency::create_async方法,所以上面使用Concurrency::task的处理我们会改为使用Concurrency::create_async:
IAsyncOperation<IVector<int>^>^ GetFileContentAsync() { return Concurrency::create_async([]() ->IVector<int>^ { // 异步处理 }); }
是不是有点难理解,让我来解释下上面的异步处理方式吧。
WinRT提供了4种异步处理的接口方式,
1. Windows::Foundation::IAsyncAction :
无返回值,无处理进度报告
2. Windows::Foundation::IAsyncActionWithProgress<TProgress>:无返回值,有处理进度报告
3. Windows::Foundation::IAsyncOperation<TResult>:有返回值,无处理进度报告
4. Windows::Foundation::IAsyncOperationWithProgress<TResult,
TProgress>:有返回值,有处理进度报告
而Concurrency::create_async方法的参数是个Lambda表达式,也就是匿名函数指针。而create_async能根据Lambda表达式中的参数和返回值来决定4种接口中的一种作为返回类型。现在可以看出上面的异步处理中,create_async参数Lambda表达式(匿名函数)是无参数的,所以它就是无处理进度报告的,而Lambda表达式的返回值类型为IVector<int>^,所以create_async就是有返回值得。综合来看上述异步处理就应该是有返回值,无处理进度报告对应的IAsyncOperation<TResult>。
如果想参照create_async的使用实例,可以参考这篇这篇文章中,其中就有返回值为IAsyncOperationWithProgress<TResult,
TProgress>的实例。
《【windows8开发】C++开发WinRT组件和JS调用》
相关文章推荐
- 【windows8开发】异步编程入门篇之 Concurrency::create_async(C++)
- 【Windows8开发】异步编程进阶篇之 create_async, create_task, make_task区别与联系
- 【windows8开发】异步编程 之Concurrency::task(C++)
- 【windows8开发】异步编程入门篇之 Concurrency::task(C++)
- 【windows8开发】异步编程之Promise(Javascript)
- 【windows8开发】深入浅出C++/CX
- 【windows8开发】C++开发Metro风格App
- 【windows8开发】C++开发Metro风格App
- 【Windows8开发】异步编程进阶篇之 Platform::Exception及task间的异常控制
- 【Windows8开发】异步编程进阶篇之 对thread说不,用task
- 【windows8开发】回复g10589119提出的问题(c#调用C++/CX dll)
- 【windows8开发】回复g10589119提出的问题(c#调用C++/CX dll)
- 【windows8开发】深入浅出C++/CX (转)
- Linux 中Eclipse开发C++ 11使用pthread_create()问题
- 【Windows8开发】异步编程进阶篇之 单线程套间(STA)及如何控制task执行上下文
- 【windows8开发】C++开发WinRT组件和JS调用
- 【windows8开发】C++开发WinRT组件和JS调用
- 【windows8开发】深入浅出C++/CX
- 【windows8开发】深入浅出C++/CX
- 【Windows8开发】异步编程进阶篇之 task group的几种方式及其间的区别