在C#中,實現異步加載機制通常使用async
和await
關鍵字
async
關鍵字聲明一個異步方法。這個方法需要返回一個Task
或Task<T>
類型的對象。ReadAsync
、WriteAsync
或HttpClient.GetAsync
等。await
關鍵字等待異步操作完成。這會將控制權交還給調用者,直到異步操作完成。在此期間,UI線程可以繼續處理其他事件,從而實現異步加載。下面是一個簡單的示例,展示了如何使用異步加載機制從網絡上下載一個文件:
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
Console.WriteLine("開始下載...");
await DownloadFileAsync("https://example.com/file.txt", "file.txt");
Console.WriteLine("下載完成!");
}
static async Task DownloadFileAsync(string url, string localPath)
{
using (HttpClient httpClient = new HttpClient())
{
using (HttpResponseMessage response = await httpClient.GetAsync(url))
{
if (response.IsSuccessStatusCode)
{
using (System.IO.Stream contentStream = await response.Content.ReadAsStreamAsync())
{
using (System.IO.FileStream fileStream = new System.IO.FileStream(localPath, System.IO.FileMode.Create, System.IO.FileAccess.Write))
{
await contentStream.CopyToAsync(fileStream);
}
}
}
else
{
Console.WriteLine($"下載失敗: {response.StatusCode}");
}
}
}
}
}
在這個示例中,我們定義了一個名為DownloadFileAsync
的異步方法,該方法使用HttpClient
類從指定的URL下載文件。我們使用await
關鍵字等待異步操作完成,例如GetAsync
、ReadAsStreamAsync
和CopyToAsync
。這樣,在文件下載過程中,UI線程可以繼續處理其他事件,從而實現異步加載。