計劃任務不會同步執行。他們被啓動,然後在強制終止之前有15秒的時間致電NotifyComplete
(或放棄)。
在直接回答您的問題時,您將使用異步IO方法,然後從完整事件或回調中調用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
}
}
我不會總是在失敗時調用Abort(),它會取消調度任務,直到應用程序再次運行。你不想這樣做,只是因爲在一個更新上有一個不規則的網絡連接。 –
@克里斯 - 同意,我只是想說明選項。我已經添加了一條評論來清除這個問題。 –