gpt4 book ai didi

.net - 在 Azure 云服务运行覆盖中使用等待

转载 作者:行者123 更新时间:2023-12-02 08:09:21 24 4
gpt4 key购买 nike

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

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

目前我唯一的想法是,在 await 调用之后,Run 方法正在不同的线程上执行,也许 Azure 中有一个要求,Run 覆盖总是在固定线程上运行?

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

或者还有其他因素在起作用吗?

最佳答案

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

await 导致其方法在等待操作时返回。如果不清楚,那么我有一个 async intro on my blog您可能会发现有帮助。

因此,Run 方法不能是异步

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

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

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

关于.net - 在 Azure 云服务运行覆盖中使用等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18714669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com