桌面或 Web 應用常遇耗時操作,為避免 UI 凍結,必須採用非同步程式設計。本文以 Windows 8 應用(C#/XAML)為例,示範 async/await 非同步呼叫模式。
StackPanel 包含「Get Blogs」按鈕(觸發非同步抓取)、「Change Text」按鈕(驗證 UI 仍可互動)、ListView 顯示部落格列表、TextBlock 顯示狀態文字。BlogItem(作者、發布日期、標題)。private async void getBlogs_Click(object sender, RoutedEventArgs e) {
waitingText.Text = "Loading Blogs...";
SyndicationClient client = new SyndicationClient();
client.BypassCacheOnRetrieve = true;
Uri feedUri = new Uri("https://windowsteamblog.com/blogs/windows/b/developers/atom.aspx");
try {
SyndicationFeed feed = await client.RetrieveFeedAsync(feedUri);
ObservableCollection<BlogItem> blogData = new ObservableCollection<BlogItem>();
listTitle.Text = feed.Title.Text;
foreach (SyndicationItem item in feed.Items) {
blogData.Add(new BlogItem() {
Author = item.Authors[0].Name.ToString(),
PubDate = item.PublishedDate.Year + "/" + item.PublishedDate.Month + "/" + item.PublishedDate.Day,
Title = item.Title.Text
});
}
blogList.ItemsSource = blogData;
waitingText.Text = "Completed!";
} catch (Exception ex) {
waitingText.Text = "Can't load the page: " + ex.ToString();
}
}
關鍵點:
async 關鍵字。RetrieveFeedAsync 時加 await,編譯器自動生成狀態機,釋放 UI 執行緒。
點擊 Get Blogs 後顯示 Loading Blogs...

非同步期間點擊 Change Text,文字變更,UI 正常回應

非同步完成,顯示 Completed! 與部落格列表

完整執行畫面
此為非同步程式設計基礎範例,Windows Runtime 提供大量 Async 後綴 API(檔案 IO、網路、感應器等),同樣適用 await 模式。支援 C#、VB、JavaScript 多語言開發。