• 异步


    http://www.cnblogs.com/dudu/p/aspnet-webform-async.html

    http://mrbool.com/how-to-create-asynchronous-device-page-in-asp-net-4-5/26022

    异步编程中的最佳做法

    https://msdn.microsoft.com/magazine/jj991977

    ASP.NET 上的 Async/Await 简介

    https://msdn.microsoft.com/magazine/dn802603.aspx

    单元测试异步代码

    https://msdn.microsoft.com/magazine/dn818493.aspx

    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】关键字。

    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();
            }
        }
    }

  • 相关阅读:
    Opengl绘制我们的小屋(二)第一人称漫游
    C# this.Invoke和this.BeginInvoke 最简单的写法
    C# 递归模型定义。赋值
    .net Core 2.1 后 Session保存,新页面获取不到值
    .net core mvc 错误信息显示 ModelState.AddModelError
    .net Core 依赖注入 Add********说明
    C# 中2个问号的作用。C#的??代表是什么意思
    asp.net mvc 加三层架构 完美搭配
    C# DataTable.Compute()用法
    C# DateTime判断时间
  • 原文地址:https://www.cnblogs.com/CodingArt/p/5855805.html
Copyright © 2020-2023  润新知