2014-09-03 93 views
1

我很难编写使用“out”返回多个值的“异步”函数。从异步函数中返回多个值

public async void getArticle(int articleID, out string html, out string title, out string author, out string url) 
{ 

} 

这足以触发该错误。只要关键字“异步” IST函数头调用函数时,我得到了以下错误的一部分:

error: Argument 2: Cannot convert from `string?' to `GLib.AsyncReadyCallback?' 

这是呼叫的样子

getArticle(15752, out html, out title, out author, out url); 

如果我删除的关键字“异步”一切再次开始工作。这甚至可能在vala中,或者我是否必须返回一个包含所有4个字符串的对象才能使其工作?

感谢所有帮助提前

最好的问候,扬

回答

2

你必须使用的异步方法结束的out参数:

getArticle.begin(15752, (obj, result) => { 
    getArticle.end(result, out html, out title, out author, out url); 
} 
+0

THX,但我怎么弄这个lambda表达式的值?类似于“getArticle.begin(15752,(obj,result,html,title,author,url)=> { getArticle.end(result,out html,out title,out author,out url); });不起作用 – 2014-09-03 02:33:21

+1

函数完成执行后调用回调函数,但立即调用begin()调用后的下一行。没有办法访问out变量,因为这些值不一定存在。查看https://wiki.gnome.org/Projects/Vala/Tutorial#Asynchronous_Methods了解更多信息。 – nemequ 2014-09-03 08:08:48