深入理解C#(六)
*第一章(大致了解C#各个版本的特性:异步代码)
C# 5特性:异步函数
可以用它来中断代码执行,而不阻塞线程。
Windows Forms中有两条规范:
不能阻塞UI线程
不能在任何其他线程中访问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
24string 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元素上,然后再等待获得库存信息并显示。