1

await在 Azure 云服务运行覆盖中使用 using 是否有任何问题?

我添加了await对一个函数调用的调用并开始出现非常奇怪的行为,随后的方法调用显然立即返回(尽管它们应该花费几秒钟)并且 VS.NET 2012 锁定并需要完全重启。

目前我唯一的想法是,在await调用之后,该Run方法正在另一个线程上执行,并且 Azure 中可能要求此Run覆盖始终在固定线程上运行?

但如果是这种情况,有没有办法确保await调用总是同步回这个线程?

或者还有其他什么东西在起作用?

4

1 回答 1

3

文档Run中所述,您的方法不应返回;如果是这样,Azure 运行时会将其解释为错误并重新启动您的角色。

await导致其方法在等待操作时返回。如果不清楚,那么我的async博客上有一个介绍,您可能会觉得有帮助。

所以,Run方法不能async

我通常async在我的方法中安装一个兼容的“主循环” Run,然后在其中运行一个无限循环。我的AsyncEx 库有一个名为 的“主循环”类型AsyncContext,可以这样使用:

public override void Run()
{
  try
  {
    AsyncContext.Run(async () =>
    {
      // Can use await safely in here.
      while (true)
        ;
    });
  }
  catch (Exception ex)
  {
    // log
    throw;
  }
}

这种方法的缺点是它只有效地使用角色实例中的单个线程。我只是将我的设计为横向扩展,并且只使用单核尺寸;它比使用多核大小和添加代码来支持多async线程更容易。

于 2013-09-10T12:42:18.847 回答