2014-09-03 74 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