在ASP.Net中完成第一组代码后启动第二组代码

在ASP.Net中完成第一组代码后启动第二组代码,asp.net,amazon-web-services,Asp.net,Amazon Web Services,我有一个ASP.Net应用程序,它调用AmazonWeb服务来启动虚拟机。一旦用户单击启动机器,页面就会发回显示虚拟机列表。这部分很好。如果虚拟机具有分配给它的静态IP地址,那么一旦虚拟机处于“运行状态”,就需要调用Amazon的单独API函数。我不希望用户必须开始分配静态IP,我希望它自动发生 我的问题是,我是否应该使用计时器,继续检查机器是否处于运行状态,然后运行第二组代码?这对我来说似乎有点笨重,所以我不确定是否有其他方法(更好的方法)可以做到这一点。如果虚拟机有一个静态IP地址,我建议启

我有一个ASP.Net应用程序,它调用AmazonWeb服务来启动虚拟机。一旦用户单击启动机器,页面就会发回显示虚拟机列表。这部分很好。如果虚拟机具有分配给它的静态IP地址,那么一旦虚拟机处于“运行状态”,就需要调用Amazon的单独API函数。我不希望用户必须开始分配静态IP,我希望它自动发生


我的问题是,我是否应该使用计时器,继续检查机器是否处于运行状态,然后运行第二组代码?这对我来说似乎有点笨重,所以我不确定是否有其他方法(更好的方法)可以做到这一点。

如果虚拟机有一个静态IP地址,我建议启动一个后台线程。您可能会在启动VM的代码末尾调用它,然后返回VM列表

然后,后台线程可以在一个循环中运行,该循环检查VM的运行状态,如果VM还没有运行,则会休眠几秒钟(或者更多,如果合适的话)。这可能看起来也很笨拙,但由于VM开始运行时无法获得回调,因此代码必须经常检查其状态。这是无法避免的

您还可以在后台线程中添加一种方法,用于在虚拟机在XX分钟后未达到运行状态时向某人发出警报

如果您使用的是C#4.0,您可以利用该类:


在ASP.NET上,在服务器上使用单个后台线程执行此操作不是一个好主意。即使不考虑IIS终止后台线程的问题(在回收应用程序池时,它可以也将这样做),当您有相对丰富的资源(客户端)可以定期回拨以检查服务器是否已启动时,您也正在使用有价值的有限资源(服务器线程)。因此,使用服务器线程会严重限制可伸缩性。我建议按照您最初的计划,使用带有计时器的客户端轮询方法。

听起来您正在寻找异步方法调用的候选者,但我不确定。我不熟悉VM API-它支持异步方法吗?我不确定API的类型是否重要,是吗?如果它是一个需要两个连续调用,但需要在两个调用之间等待的黑盒API呢?这有助于澄清问题吗?如果黑盒API只支持这两个调用,我不知道您还有什么选择。我在想,如果它支持异步调用,那么您可能会得到一个回发警报,告诉您VM上的各种事件何时发生。这是Amazon弹性计算云服务吗?TEG-是的,这是Amazon的EC2服务。
Task.Factory.StartNew(() => CheckThatVMIsRunningAndAssignStaticIP());