我正在asp.net/C#中的一个应用程序中工作,在这个应用程序中,我集成了一个第三方产品(使用他们支持的API)。
现在,在应用程序的特定Button_Click()事件中,我想执行三个任务。
status(data)中获取task2并在数据库中进行操作。这里,我需要检查第三方服务器是否有一个特定的交换机。开关是指数据是否存在。我使用API的一个API方法来检索状态,它将返回ACTIVE/INACTIVE。
但问题是,getdata()方法将需要几分钟来验证该开关,比如~2-7 Mins,直到应用程序不再空闲,用户才会执行应用程序中提供的任何操作。
我所做的是:
完成Task1,并在单独的线程中创建task2 ,它可以正常工作一段时间,因此第三个任务也可以完成它。
但是线程不像预期的那样工作,如果用户执行任何其他操作,如重新加载页面或任何其他操作,线程就会被中断和停止。所以task2和task3都失败了。
还有其他解决办法吗?
发布于 2015-08-17 12:36:55
与任何其他面向web的体系结构一样,ASP.NET是一个完全面向多线程的环境,来自客户端的所有请求都由一个新的(或池) Thread处理,并且在这个句柄中创建的所有后台或子线程都在请求句柄完成后被销毁(中止)。
因此,您不能确定后台线程中的操作是否会完成。如前所述,您必须创建一个运行所有所需工作并向客户端提供结果的位置。 end point非常简单(google可以为您提供几十个链接),但我建议您深入分析到底需要什么类型的绑定,因为有许多变体,而且我认为TCP或HTTP绑定不适合您的需要。
我建议您选择一个命名管道,因为web应用程序和窗口服务都是.NET应用程序。所以已经有关于这个的问题了,例如,您可以看到下面一个:WCF named pipe minimal example
https://stackoverflow.com/questions/32010804
复制相似问题