我的ASP.Net 4网站调用了一些代码,以产生一个长时间运行的脚本进程。标准输出被读取,返回值被更新到数据库中。我希望"启动并忘记"这段代码,以便我的UI保持响应,并且用户不必等待这两个操作完成。这两个操作的最终结果不需要由调用代码处理,所以我认为我不需要"等待"任何东西,也不需要任何成功或失败的指示。
我对所有可用的选项感到困惑。最好的编码方式是什么,使这两个操作只需自己独立地执行它们的任务?
我对所有可用的选项感到困惑。最好的编码方式是什么,使这两个操作只需自己独立地执行它们的任务?
HostingEnvironment.QueueBackgroundWorkItem
(.NET 4.5.2) 或我的AspNetBackgroundTasks (.NET 4.5)。这是一个更加危险的选择,因为没有可靠的存储工作。好吧,"最佳方式"可能有争议,但我建议使用类似以下的TPL
进行处理:
Task parentTask = Task.Factory.StartNew(() => SomeMethod(someParameter));
我认为你混淆了一些术语。
WCF 和 Web API 是两种服务平台,可以通过服务远程提供操作。
使用任何一种技术,这些公开的操作都可以同步或异步实现,但即使您选择异步实现,调用此类操作的时间可能会有很大的延迟,因此应该异步调用。
为了从您的ASP.NET Web执行这些服务操作的调用,您可以使用诸如TPL之类的库,它提供了异步的Tasks
。 async
和await
只是C#关键字,以便更轻松地处理此类任务。
除了TPL之外,您还可以使用其他库和实现,例如线程来执行调用而不阻止您的Web,但在.NET中,Tasks是首选的方式。
如果您不太可能从不同的应用程序重用,并且您的长时间运行的进程或不需要位于不同的计算机上,则可以将其直接实现为Task,而不必经过实施服务的所有麻烦。