2014-09-03 2 views
1

У меня возникли проблемы с записью функции «async», которая возвращает более одного значения с помощью «out».Возврат нескольких значений из функции async

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

} 

Этого достаточно, чтобы вызвать ошибку. Как только ключевое слово «асинхронным» ИСТ часть заголовка функции я получаю следующее сообщение об ошибке при вызове функции:

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

это то, что вызов выглядит

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

если удалить ключевое слово «async» все начинает работать снова. Возможно ли это в vala или мне нужно вернуть объект, содержащий все 4 строки, чтобы заставить его работать?

Спасибо за любую помощь заранее

наилучшими пожеланиями, Ян

ответ

2

Вы должны использовать out параметры в конце асинхронного метода:

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

ТНХ, но как я могу получить значения из этого лямбда-выражения? Что-то вроде «getArticle.begin (15752, (obj, result, html, title, author, url) => { getArticle.end (результат, out html, out title, out author, out url); }); не работает –

+1

Обратный вызов вызывается после завершения выполнения функции, но следующая строка после вызова begin() вызывается немедленно. Невозможно получить доступ к внешним переменным, потому что значения не обязательно существуют. Посмотрите на https://wiki.gnome.org/Projects/Vala/Tutorial#Asynchronous_Methods для получения дополнительной информации. – nemequ