c# - 返回 Task<bool> 和只返回 bool 有什么区别

标签 c# asp.net asp.net-mvc task-parallel-library

希望这是一个不错且简单的答案。

我在 ASP.NET Core 1 中使用 C# MVC Web API。我正在创建 Web 方法,我已经看到了返回数据的示例。

示例 1:

public async Task<IActionResult> ExampleCall([FromBody]ExampleObj model)
{
     // Call some lower level function...
     var result = LowerLevelCall(model);
     return result;
}

并看到了其他类似的例子。

示例 2:

public async Task<IActionResult> ExampleCall([FromBody]ExampleObj model)
{
     // Call some lower level function...
     var result = await LowerLevelCall(model);
     return result;
}

主要区别在于示例 2 使用 await 运算符。实现 await 运算符的含义是什么?这会释放资源而不是等待示例 1 中的代码完成吗?

提前感谢您的任何提示!

最佳答案

在您的场景中,async 运算符将停止执行该方法,直到从 LowerLevelCall 收到结果。但是,当该方法的执行停止时,await 会异步等待,因此线程本身不会被阻塞。从 LowerLevelCall 获得结果后,该方法将恢复同步执行。

示例 1 - 如果 LowerLevelCall 需要很长时间才能执行,您的线程将被阻塞并且将坐在那里什么都不做,直到 LowerLevelCall 执行完成。

示例 2 - 如果您使用 await,您将不会阻塞线程,因为 await 是异步等待。 LowerLevelCall 完成执行后,方法的结果将分配给您的 result 变量。

Intro to Async And Await - 本文应该可以帮助您开始使用 async 和 await。

关于c# - 返回 Task<bool> 和只返回 bool 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36838778/

相关文章:

c# - C#编译器是否优化空语句

asp.net - 寻找与 PayPal 兼容的轻量级 ASP.net 购物车

javascript - 如何使用js在两个aspx页面之间进行通信?

ASP.net 成员(member)添加自定义列

c# - 将异步 lambda 表达式转换为委托(delegate)类型 System.Func<T>?

c# - 如何在 C# 中将对象[,] 转换为数据表

c# - 测试属性是否可用于动态变量

c# - 删除 EnumDropDownListFor 框顶部的空白/空条目

java - 创建移动银行计划

c# - "The parameters dictionary contains a null entry for parameter"- 如何修复?