Как асинхронный сетевой ввод-вывод обрабатывается запланированной задачей WP7? - PullRequest
0 голосов
/ 14 августа 2011

С Mango можно создать запланированное задание для обновления данных ShellTiles.

Задача - позвонить NotifyComplete(), когда это будет сделано.

Учитывая, что ввод-вывод на телефоне должен быть асинхронным, как вы убедитесь, что ваш ввод-вывод завершен до вызова NotifyComplete()?

Через синхронизацию приматов? Или будет разрешено завершить ввод-вывод после того, как Задача уведомит операционную систему телефона о завершении?

Синхронизация приматов - очевидный ответ, но на телефоне блокировка не является хорошим выбором.

1 Ответ

3 голосов
/ 14 августа 2011

Запланированные задания не выполняются синхронно. Они запускаются и затем имеют 15 секунд для вызова NotifyComplete (или прерывания), прежде чем они принудительно завершаются.

В прямом ответе на ваш вопрос вы должны использовать асинхронные методы ввода-вывода, а затем вызывать NotifyComplete из завершенного события или обратного вызова.

Вот пример. Я использовал материал Microsoft.Phone.Reactive, но вы можете использовать Begin / EndGetResponse традиционным способом, если хотите.

public class SampleTask : ScheduledTaskAgent
{
    protected override void OnInvoke(ScheduledTask task)
    {
        HttpWebRequest request = WebRequest.CreateHttp("http://stackoverflow.com");

        Observable.FromAsyncPattern<WebResponse>(
                request.BeginEndResponse,
                request.EndGetResponse
            )()
            .Subscribe(response =>
            {
                // Process the response
                NotifyComplete();

            }, ex =>
            {
                // Process the error
                Abort(); // Unschedules the task (if the exception indicates 
                         // the task cannot run successfully again)
            });

        // Synchronous control flow will continue and exit the OnInvoke method
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...