C# 长服务器端进程期间的同步用户对话框

C# 长服务器端进程期间的同步用户对话框,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个组件,它将几个文件导入到一个大型数据库中。这个过程需要很长时间,在许多情况下可能需要用户对话框,比如“这是A还是B?(按钮A,按钮B)”等等 该组件是在考虑桌面应用程序的情况下编写的,现在需要将该组件迁移到ASP.NET MVC 5应用程序中。我看到的唯一严重问题是管理这些同步用户对话框。此外,通过设计,同步用户输入有时取决于以前的用户输入等 我知道同步编码“根本不适合”网络世界,但重新设计整个大型算法,使其在用户对话框方面以某种方式异步将是一项巨大的工作,并将导致大量新的测试,等等 在

我有一个组件,它将几个文件导入到一个大型数据库中。这个过程需要很长时间,在许多情况下可能需要用户对话框,比如“这是A还是B?(按钮A,按钮B)”等等

该组件是在考虑桌面应用程序的情况下编写的,现在需要将该组件迁移到ASP.NET MVC 5应用程序中。我看到的唯一严重问题是管理这些同步用户对话框。此外,通过设计,同步用户输入有时取决于以前的用户输入等

我知道同步编码“根本不适合”网络世界,但重新设计整个大型算法,使其在用户对话框方面以某种方式异步将是一项巨大的工作,并将导致大量新的测试,等等

在这种情况下,是否有任何技术可以应用,而无需将每个用户输入重写为异步

值得注意的是,该操作将由非常有限的用户使用,而且很少使用,比如说每周1-2次,因此总体性能不是问题

我在想什么

  • 通过AJAX调用启动长操作,服务器将启动一个新线程并返回一些“指向”操作的令牌
  • 例如,如果有新的用户输入请求,客户端将每秒使用此令牌轮询服务器
  • 当需要用户输入时,操作将等待X(例如120)秒以获得答案,否则将自动取消
  • 如果客户端收到新的用户输入请求,它将显示对话框,收集结果并将其发送回服务器,这样操作就可以继续

  • 这是一种可行的设计,还是有更好的解决方案?

    使用SignalR将事件从组件推送到网页,并显示所需的对话框。@Dennis感谢您的评论。是的,我在想信号员,但那只是一半。我的意思是,据我所知,客户端的信号处理需要同步,所以不可能显示带有回调的自定义对话框,但如果我错了,请纠正我。Still Signal可用于在需要用户输入时显式通知客户端,因此无需轮询。在IMO中,您需要构建如下某种工作流:“从客户端启动长时间运行的进程->工作->从服务器推送通知并显示对话框->发布用户条目并将其结果存储在服务器端->根据结果继续进程->从服务器推送通知并显示对话框->工作->,”。因此,“回调”“是来自服务器的通知,用于向用户查询某些数据。如果工作流状态存储在服务器上,它知道要查询什么。使用SignalR将事件从组件推送到网页,并显示您需要的对话框。@Dennis感谢您的评论。是的,我在想信号员,但那只是一半。我的意思是,据我所知,客户端的信号处理需要同步,所以不可能显示带有回调的自定义对话框,但如果我错了,请纠正我。Still Signal可用于在需要用户输入时显式通知客户端,因此无需轮询。在IMO中,您需要构建如下某种工作流:“从客户端启动长时间运行的进程->工作->从服务器推送通知并显示对话框->发布用户条目并将其结果存储在服务器端->根据结果继续进程->从服务器推送通知并显示对话框->工作->,”。因此,“回调”“是来自服务器的通知,用于向用户查询某些数据。若工作流状态存储在服务器上,它就知道要查询什么。