当前位置: 首页 > 知识库问答 >
问题:

等待与任务.结果在异步方法 [重复]

岳英耀
2023-03-14

执行以下操作有什么不同:

async Task<T> method(){
    var r = await dynamodb.GetItemAsync(...)
    return r.Item;
}

vs

async Task<T> method(){
    var task = dynamodb.GetItemAsync(...)
    return task.Result.Item;
}

在我的情况下,出于某种原因,只有第二种方法有效。第一个似乎永远不会结束。

共有2个答案

籍永安
2023-03-14

任务。结果是访问属性的get访问器会阻止调用线程,直到异步操作完成;它相当于调用Wait方法。一旦操作的结果可用,它将被存储并在后续调用result属性时立即返回。请注意,如果在任务操作期间发生异常,或者任务已被取消,则Result属性不会返回值。相反,尝试访问属性值会引发AggregateException异常。唯一的区别是await不会阻塞。相反,它将异步等待任务完成,然后继续

姚棋
2023-03-14

< code>await异步解包任务的结果,而仅使用result会阻塞,直到任务完成。

参见Jon Skeet的解释。

 类似资料:
  • 我有一组从基类继承的命令。基类有以下声明: 此异步方法缺少“await”运算符,将同步运行。考虑使用'await'运算符来等待非阻塞API调用,或者使用'await task.run(...)'在后台线程上执行CPU绑定的工作。 显式提供任务完成返回值是否正确?

  • 我们有一个async/await方法,它通过实体框架调用存储的过程,该框架由同步方法调用。 需要很长的时间来执行,这可能就是我们编写async/await的原因,它可以被多个地方使用。 我知道我们不应该混合异步和同步调用,但假设我们有这种情况并且我们正在使用 从同步方法 调用异步方法 GetLoanDataAsync,我理解该方法 - 将在后台线程上运行。 我的问题是,如果我们有一个异步方法< c

  • 在实际应用中,我对 C# 中的异步和 await 方法进行了说明。请考虑以程,这是工作代码的简单版本: 助手.cs 功能控制器.cs processing.js 现在,问题是第三方服务的所需时间更少(例如:2秒),而所需的时间更多(例如:100秒)。进行两个ajax调用并使用异步和等待是为了呈现自我。屏幕上显示数据1,不要等到自己。Data2已被检索。不幸的是,这种情况没有发生,我必须等待100秒

  • 问题内容: 我想同时下载一些文件,例如100个文件。因此,我决定将下载线程添加到调度队列中,GCD会调整同时运行多少个线程。 这里的问题是:中的块将立即完成,因为它将在另一个线程上运行。因此,如果长度为100,它将立即创建100个线程。 如何配置块以等待下载任务完成?我不想使用,因为它只允许同时运行一个下载任务。 问题答案: 要扩展Abhinav的答案,您应该: 使用创建一个组。 在开始每个下载任

  • 我在网上搜索了很多关于vs await async,但是在这个特定的使用场景中,我并不真正理解其中的区别。我相信情况很简单。 vs. 其中,是一个异步方法,其中包含一些异步调用,例如使用wait调用db。 问题: 在这种情况下,两者之间有什么区别吗?任何帮助或意见,谢谢!

  • 在C#中,我有以下两个简单的例子: 第一个示例创建一个打印“开始”的任务,等待5秒钟打印“完成”,然后结束任务。我等待任务完成,然后打印“全部完成”。当我运行测试时,它会按预期运行。 第二个测试应该具有相同的行为,只是由于使用了async和Wait,任务内部的等待应该是非阻塞的。但是这个测试只打印“开始”,然后立即打印“全部完成”和“完成”,永远不会打印。 我不知道我为什么会有这样的行为:S非常感