C# 中的 Task.FromResult() 方法

2024 年 8 月 29 日 | 4 分钟阅读

在 C# 中,.NET 框架中的任务并行库 (TPL) 提供了一个名为 Task.FromResult() 的方法。它使程序员能够创建一个已完成并产生所需结果的任务。对于异步编程场景,当需要同步返回已完成的任务时,这种方法在可能需要结合同步和异步代码时特别有用。

Task.FromResult() 主要用于创建一个表示已完成并具有给定结果的异步操作的任务。

重要的是,Task.FromResult() 不提供异步执行的优势,因此不建议将其用于 CPU 密集型或可能阻塞线程的操作。
单元测试人员经常使用 Task.FromResult() 来模拟异步行为,而无需异步操作的开销。

语法

它具有以下语法:

  • 我们需要用已完成的任务包装的结果类型称为 TResult
  • 我们需要分配给任务结果的值称为结果。

示例

让我们举一个例子来说明 C# 中的 Task.FromResult() 方法。

输出

Result: 123

示例代码

让我们再举一个例子来说明 C# 中的 Task.FromResult() 方法。

输出

Example 1 Result: 42
Example 2 Result: Hello, world!

说明

  • 示例 1 中使用 Task 创建了一个具有整数结果 (42) 的已完成任务。fromResult()。
  • 示例 2 中使用 Task 创建了一个具有字符串结果 ("Hello, world!") 的已完成任务。fromResult()。

示例 2

让我们再举一个例子来说明 C# 中的 Task.FromResult() 方法。

输出

Result: User ID: 10567482, Username: Harsha

说明

  • 在此示例中,结果显示了如何模拟异步操作以使用 FromResult() 检索用户数据。
  • GetUserAsync() 方法使用 Task 通过延迟一秒来模拟异步操作。Delay(),然后使用 GetUserFromDatabase() 同步获取用户数据。
  • 在这种情况下,GetUserFromDatabase() 仅返回一个硬编码用户用于演示;否则,它类似于从数据库或外部服务获取用户数据。
  • 接下来,使用 Task,将从 GetUserFromDatabase() 获得的用户数据包装在一个已完成的任务中。fromResult() 并提供异步返回。

结论

对于使用指定结果创建已完成的任务,C# 的 Task.FromResult() 方法是一种简单有效的解决方案。这种方法能够无缝弥合同步和异步代码之间的差距,在需要集成这两种范式的场景中特别有用。 Task.FromResult() 可以用于模拟具有预定义结果的异步操作,这在处理缓存或预计算数据或单元测试代码时非常有用,因为它具有灵活且简单的语法。然而,由于它可能会抵消异步编程的优势,因此必须注意确保 Task.FromResult() 不会被滥用于耗时或阻塞进程。对于 .NET 框架中的异步编程,Task.FromResult() 是一个有用的工具,有助于实现清晰简单的代码设计。


下一个主题C# 中的线程池