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

在不同级别的体系结构C#中使用等待的[异步任务]

杨成礼
2023-03-14
public async Task<List<Object>> GetAsync()
{
  return await context.Set<Object>().ToListAsync();
}
var data = await GetAsync();

在最高层,我也在等待这个方法。我应该只在这些方法中的一个上使用await吗?在每次等待时使用资源和创建新线程是否会造成性能损失?

我已经检查了评论中列出的问题,它们没有反映性能问题,只是说你可以做到。我想要最佳实践和为什么/不这样做的原因。

共有1个答案

熊嘉茂
2023-03-14

我想补充一下。有些Async方法不需要使用Async/await关键字。检测这种误用非常重要,因为添加Async修饰符是有代价的。

例如。在示例中不需要Async/await关键字。

public Task<List<Object>> GetAsync()
{
  return context.Set<Object>().ToListAsync();
}

后来呢:

var data = await GetAsync();
 类似资料:
  • 任务或任务 我们也可以定义自己的可实现对象。对象应具有以下资格。 < li >它有一个GetAwaiter()方法(实例方法或扩展方法); < li >其GetAwaiter()方法返回一个Awaiter。在下列情况下,对象是一个标识符: < ul > < li >它实现INotifyCompletion或ICriticalNotifyCompletion接口; < li >它有一个IsCompl

  • 我只想确保我很好地理解异步await和task.run或task.whenall之间的区别 所以异步等待就是处理异步方法。它意味着隐含着一个处理顺序。 我在不阻塞主线程的情况下运行了一个很长的处理,并等待结果继续。 对于task.run和task.when,这里有一个多线程的新概念。这意味着我可以在一个新线程上启动一个长进程,它不会等待完成来继续代码。代码在新线程上。在这个线程上,我可以等待方法。

  • 我最近阅读了有关async/await的文章,我感到困惑的是,我阅读的许多文章/帖子都指出,在使用async await(示例)时不会创建新线程。 我创建了一个简单的控制台应用程序来测试它 以下代码的输出是: 我想知道,如果没有创建其他线程,部分在哪里运行?如果它运行在同一个线程上,难道它不应该因为长的I/O请求而阻塞它吗?或者编译器足够聪明,如果它需要太长的时间,就可以将该操作移到另一个线程上,

  • 我想进行一个基于当前状态的API调用,但不能使setState函数作为异步函数工作。 给我错误: 类型为“”的参数(状态:只读)= 如果我在setState方法之外获取数据,它会起作用,但我害怕对过时的页码进行API调用:

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

  • 执行以下操作有什么不同: vs 在我的情况下,出于某种原因,只有第二种方法有效。第一个似乎永远不会结束。