Pou*_*sen 13 azure async-await
我正在使用Tasks,Async并在我的WorkerRole(RoleEntryPoint)中等待.
我有一些无法解释的回收,我现在发现,如果有一些东西在等待呼叫中运行很长时间,那么这个角色就会回收.要重现它,只需在Run方法中等待Task.Delay(60000).
有谁可以向我解释原因?
Ste*_*ary 22
该Run方法必须阻止.来自文档:
如果覆盖Run方法,则代码应无限期阻塞.如果Run方法返回,则通过引发Stopping事件并调用OnStop方法自动回收角色,以便在角色脱机之前执行关闭序列.
一个简单的解决方案就是这样做:
public override void Run()
{
RunAsync().Wait();
}
public async Task RunAsync()
{
while (true)
{
await Task.Delay(60000);
}
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以AsyncContext从我的AsyncEx库中使用:
public override void Run()
{
AsyncContext.Run(async () =>
{
while (true)
{
await Task.Delay(60000);
}
});
}
Run Code Online (Sandbox Code Playgroud)
无论您选择的选项,Run应该不会是async.这有点像Main一个控制台应用程序(请参阅我的博客,了解为什么async Main不允许).
| 归档时间: |
|
| 查看次数: |
3831 次 |
| 最近记录: |