5.2C#异步编程场景

C#异步编程场景分为 I/O 绑定(例如从网络请求数据、访问数据库或读取和写入到文件系统)和 CPU 绑定(例如执行成本高昂的计算)。

I/O 绑定场景:从 Web 服务下载数据

对于 I/O 绑定代码,等待一个在 async 方法中返回 Task 或 Task<T> 的操作。不应使用任务并行库

private readonly HttpClient _httpClient = new HttpClient();

downloadButton.Clicked += async (o, e) =>
{
    // This line will yield control to the UI as the request
    // from the web service is happening.
    //
    // The UI thread is now free to perform other work.
    var stringData = await _httpClient.GetStringAsync(URL);
    DoSomethingWithData(stringData);
};

CPU 绑定场景:为游戏执行计算

对于 CPU 绑定代码,等待一个使用 Task.Run 方法在后台线程启动的操作。如果该工作同时适用于并发和并行,还应考虑使用任务并行库

private DamageResult CalculateDamageDone()
{
    // Code omitted:
    //
    // Does an expensive calculation and returns
    // the result of that calculation.
}

calculateButton.Clicked += async (o, e) =>
{
    // This line will yield control to the UI while CalculateDamageDone()
    // performs its work. The UI thread is free to perform other work.
    var damageResult = await Task.Run(() => CalculateDamageDone());
    DisplayDamage(damageResult);
};

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/csharp/csharplang/11605.html

(0)
上一篇 2021年5月2日 21:38
下一篇 2021年5月3日 01:38

相关推荐

  • 3.1C#语言的命名空间(Namespace)

    命名空间声明 从 C# 10 开始,您可以为该文件中定义的所有类型声明命名空间。 引入命名空间

    C#语言教程 2021年3月1日
    01670
  • 3.10C#引用类型之委托(Delegate)

    委托声明 委托类型 表示对具有 特定参数列表 和 返回类型 的方法的引用,类似于其它一些语言中存在的“函数指针”概念。 委托类同于函数式语言提供的函数类型。通过委托,可以将方法视为可赋值给变量或作为参数传递的实体。 具有相同参数列表和返回类型的两个不同的委托类型被视为不同的委托类型。 目标方法 委托可以引用静态方法、实…

    C#语言教程 2021年3月10日
    01120
  • 3.8C#引用类型之集合(Collection)

    与数组不同,集合的长度(元素的个数)可以动态改变,可以向集合添加、删除元素 。 System.Collections.Generic 类 当集合中的所有元素都具有相同的数据类型时,泛型集合会非常有用。 类 说明 Dictionary<TKey,TValue> 表示基于键进行组织的键/值对的集合。 List&…

    C#语言教程 2021年3月8日
    01140

发表评论

登录后才能评论