深入理解C#(六)

*第一章(大致了解C#各个版本的特性:异步代码)

C# 5特性:异步函数
可以用它来中断代码执行,而不阻塞线程。

Windows Forms中有两条规范:

  1. 不能阻塞UI线程

  2. 不能在任何其他线程中访问UI元素

    private async void CheckProduct(object sender, EventArgs e)
    ​ {
    ​ try
    ​ {
    ​ // Only permit one lookup at a time
    ​ productCheckButton.Enabled = false;
    ​ statusLabel.Text = “Checking…”;
    ​ nameValue.Text = “”;
    ​ priceValue.Text = “”;
    ​ stockValue.Text = “”;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
            string id = idInput.Text;
    Task<Product> productLookup = directory.LookupProductAsync(id);
    Task<int> stockLookup = warehouse.LookupStockLevelAsync(id);

    Product product = await productLookup;
    if (product == null)
    {
    statusLabel.Text = "Product not found";
    // We don't care about the result of the stock check
    return;
    }
    nameValue.Text = product.Name;
    priceValue.Text = product.Price.ToString("c");

    int stock = await stockLookup;
    stockValue.Text = stock.ToString();
    statusLabel.Text = "Ready";
    }
    finally
    {
    // However we finish this method, allow another lookup
    productCheckButton.Enabled = true;
    }
    }

新的语法:方法的async修饰符和两个await表达式

说明:现在产品目录和库存中查询产品详细信息和当前库存。等待(await)直到找到产品信息,如果目录中没有条目与给定ID对应,就退出。否则,将产品名称和价格显示在UI元素上,然后再等待获得库存信息并显示。