Если ваше требование включает в себя значимые параллельные незавершенные асинхронные операции, не беспокойтесь о прочтении этого ответа.Однако, если операции вызываются последовательно (одна не вызывается до тех пор, пока другая не завершится), как это может показаться, вы можете найти материал, на который здесь ссылаются, несколько полезный.
Обработка асинхронного кода в Silverlight подвластнакоторый я проявляю большой интерес.Я написал несколько блогов о том, что я называю AsynchOperationService
, который позволяет писать код с использованием простого синхронного стиля и поддерживает хорошую обработку ошибок.
Выберите их из этого списка .
Rx может быть вариантом, это выглядит так, как будто оно будет мощным.Однако это сложно, изначально он был разработан для обработки потока входящих событий.Я не убежден (хотя я признаю, что мое исследование все еще мелкое), что оно хорошо подходит для операции «Начни что-нибудь, ответь позже на это что-то заканчивая».
Лично мне нравятся вещи, которые будут простыми и прямымивперед, но очевидно, что мне нужно полностью изменить способ, которым я кодирую, чтобы должным образом включить мощь Rx, и я совершенно уверен, что полученный код не будет таким легким для чтения.
Принимая во внимание AsyncOperationService
имеет очень легкий отпечаток, и как только я создал несколько полезных однострочных функций, результирующая последовательность кода довольно проста для чтения.
Так в чем же подвох?Ну, есть один и он либо именно то, что вам нужно, либо работает именно против того, что вам нужно.Подход работает в предположении, что серию асинхронных операций необходимо выполнять последовательно.Если ваше требование касается значительных параллельных операций, то в его нынешнем виде AsyncOperationService
не для вас (хотя это может измениться).