在傳統 ASP 時代,若要在網頁中嵌入論壇或外部網站的資訊,常使用 JavaScript 或 `
#region task class
// 這是一個任務類別,執行具體的非同步工作
public class RssAsyncTask
{
private String _rssContent;
private AsyncTaskDelegate _dlgt;
private string rssUrl;
private bool _success;
public bool IsSuccess
{
get { return _success; }
}
public RssAsyncTask(string rssUrl)
{
this.rssUrl = rssUrl;
}
// 建立委派
protected delegate void AsyncTaskDelegate();
public String GetRssContent()
{
return _rssContent;
}
public void DoTheAsyncTask()
{
// 模擬延遲的非同步任務,實際應用中移除 Thread.Sleep
WebClient wc = new WebClient();
try
{
_rssContent = wc.DownloadString(rssUrl);
_success = true;
}
catch (Exception e)
{
_rssContent = e.Message;
}
finally
{
wc.Dispose();
}
// Thread.Sleep(TimeSpan.FromSeconds(5.0));
}
// 開始非同步任務的方法
public IAsyncResult OnBegin(object sender, EventArgs e,
AsyncCallback cb, object extraData)
{
_dlgt = new AsyncTaskDelegate(DoTheAsyncTask);
IAsyncResult result = _dlgt.BeginInvoke(cb, extraData);
return result;
}
// 非同步任務結束時呼叫
public void OnEnd(IAsyncResult ar)
{
_dlgt.EndInvoke(ar);
}
// 逾時處理
public void OnTimeout(IAsyncResult ar)
{
_rssContent = "Ansynchronous task failed to complete " +
"because it exceeded the AsyncTimeout parameter.";
}
}
#endregion
在 `.aspx` 頁面的 `Page_Load` 中註冊任務:
protected void Page_Load(object sender, EventArgs e)
{
string rssUrl = "https://example.com/rss.xml";
RssAsyncTask task = new RssAsyncTask(rssUrl);
PageAsyncTask asyncTask = new PageAsyncTask(
task.OnBegin, task.OnEnd, task.OnTimeout, null);
Page.RegisterAsyncTask(asyncTask);
}
非同步完成後,在 `Page_PreRenderComplete` 或適當事件中取得內容並繫結至控制項(如 `Literal`、`Repeater` 或 `GridView`)。
透過 ASP.NET 非同步頁面機制讀取 RSS,能有效避免阻塞執行緒,提升網站回應速度與擴展性,是整合外部資料的最佳實踐之一。