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

调用异步方法时使用.wait()的情况是什么

茹照
2023-03-14
 public async Task<ScanResult> ScanAsync(string FQDN)
 {
    // sample of the operation i am doing 
    var c = await context.SingleOrDefaultAsync(a=>a.id == 1);
    var list = await context.Employees.ToListAsync();
    await context.SaveChangesAsync();
    //etc..
}
public void Scan()
{
    ScanAsync("test").Wait();
}
RecurringJob.AddOrUpdate(() => ss.Scan(), Cron.Minutely);

那么当我使用.wait()调用异步方法时会发生什么呢?整个方法的操作会以同步的方式完成吗?例如,如上面所示,我在ScanAsync()中有三个异步操作;singleordefualtasynctolistasync&savechangesasync,那么它们是否会以同步方式执行,因为我使用.wait()调用ScanAsync方法?

共有1个答案

宗政松
2023-03-14

那么当我使用。wait()调用异步方法时会发生什么呢?,整个方法的操作会以同步的方式完成吗?例如,如上面所示,我在ScanAsync()中有三个异步操作;SingleOrdeFualTasync、ToListAsync和SaveChangesAsync,那么它们是否会以同步方式执行,因为我使用。wait()调用ScanAsync方法?

查询数据库的方法仍将异步执行,但是调用wait的事实意味着,即使您正在释放线程,它也不会在停止时返回到ASP.NET线程池。

这也可能导致死锁,因为ASP.NET有一个自定义同步上下文,它确保在继续异步调用时请求的上下文是可用的。

编辑:

在评论中,你问:

就像我目前正在使用hangefire一样,消除异步效果吗?如果是,那么使用同步方法会更好吗?或者对HangeFire使用sync或async将完全相同

 类似资料:
  • 同步调用异步方法最安全的方法是什么?

  • 我正试图从同步方法运行异步方法。但是我不能等待异步方法,因为我在同步方法中。我一定不理解TPL,因为这是我第一次使用它。 每个方法都需要前一个方法来完成,因为第一个方法的数据用于第二个方法。 Await运算符只能在异步方法中使用。考虑用'async'修饰符标记此方法,并将其返回类型更改为'task' 但是,如果我使用async修饰符,这将是一个异步操作。因此,如果我对的调用没有使用await运算符

  • Java 对字段具有不同的访问级别: 由于封装的概念,我们总是尝试使用<code>private</code>修饰符,以及所需访问级别的getter和setter。这个答案显示了它的各种优点。既然getter和setter很酷,我们应该在什么时候选择<code>public/protected/default对象字段 到<代码>私有对象字段 澄清:我完全理解为什么以及什么是getter、sette

  • 问题内容: 当每个呼叫都取决于之前的呼叫是否已完成时,我试图找到创建异步呼叫的最佳方法。目前,我通过递归调用定义的流程函数来链接方法,如下所示。 这就是我目前正在做的。 然后我将其称为如下 虽然这对我来说非常好,但我不禁认为必须有一种更好(更简单)的方法。以后我的递归调用变得太深时,会发生什么? 注意 :我不是在浏览器中使用javascript,而是在Titanium框架中使用本机,这类似于Nod