http://www.cnblogs.com/dudu/p/aspnet-webform-async.htmlcss
http://mrbool.com/how-to-create-asynchronous-device-page-in-asp-net-4-5/26022html
https://msdn.microsoft.com/magazine/jj991977web
ASP.NET 上的 Async/Await 簡介編程
https://msdn.microsoft.com/magazine/dn802603.aspx異步
https://msdn.microsoft.com/magazine/dn818493.aspxasync
1. Page 的屬性【Async】設定爲【true】異步編程
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ExampleAsync.Default" Async="true" %>
2.【PageAsyncTask】定義異步任務,使用【RegisterAsyncTask】 向該頁註冊任務單元測試
3.【GetMyPosts】方法 標記爲【async】,且返回一個【Task】。測試
4. 使用異步方法時,使用【await】關鍵字。spa
using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; using System.Web.UI; namespace ExampleAsync { public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Debug.WriteLine("Start"); RegisterAsyncTask(new PageAsyncTask(ShowOrders)); Debug.WriteLine("Finish"); lbl_Title.Text = "訂單信息"; } private async Task ShowOrders() { var list = await GetMyPosts(); gv_Orders.DataSource = list; gv_Orders.DataBind(); foreach (var item in list) { Debug.WriteLine($"ID:{item.Id},Name:{item.Name}"); Thread.Sleep(600); } } private async Task<List<Order>> GetMyPosts() { return await Task.Run(() => OrderRepository.Orders); } } public class Order { public string Id { get; set; } public string Name { get; set; } } public static class OrderRepository { public static List<Order> Orders = new List<Order>(); static OrderRepository() { for (int i = 0; i < 10; i++) { Orders.Add(new Order() { Id = i.ToString(), Name = $"Pencil_{i}" }); } } } }
單元測試:
using System;
using System.Threading.Tasks;
namespace ExampleAsync.BLL
{
public sealed class SystemUnderTest
{
public static async Task SimpleAsync()
{
await Task.Delay(10);
throw new Exception("Should fail.");
}
}
}
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using ExampleAsync.BLL;
namespace ExampleAsync.UnitTest
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public async Task CorrectlyFailingTest()
{
await SystemUnderTest.SimpleAsync();
}
}
}