2013-10-12 3 views
4

У меня есть приложение, которое загрузит некоторые данные при запуске; Однако каждый метод зависит от собранных данных предыдущего. Поэтому мне интересно, как я могу создать такую ​​последовательность загрузки и ждать, пока каждый метод завершится асинхронно в .NET4.Последовательность выполнения метода

NB: Я знаю, что этого легко достичь с помощью функции async \ await .NET4.5, но я должен придерживаться .NET4 [для пользователей Windows XP].

Что я пробовал до сих пор, использует делегаты и события, чтобы связать методы вместе; Тем не менее, он оказался очень скучным кодом.

+0

Почему не использовать тему или BackgroundWorker? – Alireza

+0

@Alireza: они создают очень незаметный/пропущенный код, который, я думаю, является другим, возможно, лучшим/чистым способом достижения того, что я хочу [последовательности загрузки]. –

+0

Задача может быть продолжена с помощью/цепями. Вы пробовали задачи? –

ответ

-1

Я обращаюсь только к проблеме «цепочки». Не нити, или что асинхронные другие говорят :)

очень простой способ заключается в использовании метода расширения, как это:

public static TOut Then<TIn, TOut>(this TIn obj, Func<TIn, TOut> convert) 
{ 
    return convert(obj); 
} 

Учитывая набор методов:

string Init(); 
int Convert(string str); 
int Add(int i); 

Вы могли бы написать: Init().Then(Convert).Then(Add) и так далее, что также читается довольно приятно.

+0

Это не кажется отдаленно применимым к вопросу OP о выполнении асинхронных операций в последовательности. – JLRishe

+0

Цитата из комментария: * особенно, когда каждый выполненный метод зависит от предыдущего вызванного метода собранной информации * Ну, я думаю, что это применимо. – Matthias

+0

Не когда они асинхронны, что является ключевым моментом вопроса. Вы не можете просто принять участие в вопросе из контекста и ответить на него. Возвращаемое значение асинхронного метода обычно не будет полученными данными, поэтому ваш подход не будет работать для этого. – JLRishe

Смежные вопросы