客户端交互后,Asp.net Thread无法正常工作

时间:2015-08-14 13:02:50

标签: c# asp.net multithreading asynchronous background-process

我正在asp.net/C#中的一个应用程序中工作,我已经集成了第三方产品(使用他们支持的API)。
现在,在应用程序的特定Button_Click()事件中,我想执行三个任务。

  1. 第一个是最简单的,将数据插入sql server并发送 与该第三方服务器相同的日期,即DONE。
  2. 第二复杂之一是我在下面详细说明的。
  3. status(data)获取task2并在数据库中执行操作。
  4. 就是这样,我需要检查特定交换机的第三方服务器。切换表示数据是否存在。我使用bool getData() API方法来检索状态,它将返回ACTIVE / INACTIVE

    但问题是getdata()方法需要几分钟来验证交换机,如~2-7 Mins,直到应用程序不会空闲,用户将执行应用程序中提供的任何操作。

    我所做的是:

    完成Task1,并在单独的帖子中设置task2 ,它可以正常工作一段时间,以便第三个任务也能正常工作。

    但是线程没有按预期工作,如果用户执行任何其他操作,如重新加载页面或其他任何操作,线程会被中断并停止。因此,task2task3都失败了。

    其他任何解决方案?

1 个答案:

答案 0 :(得分:1)

与任何其他面向Web的体系结构一样,ASP.NET是一个完全面向多线程的环境,来自客户端的所有请求都由新的(或池化的)Thread以及所有后台或子项处理在请求句柄完成后,在这样的句柄中创建的线程被销毁(中止)。

因此,您无法确定后台线程中的操作是否已完成。正如已经说过的评论一样,您必须创建一个可以运行所有需要的工作并将结果提供给客户的地方。这很容易to setup a windows service as a WCF end point(谷歌可以为你提供几十个链接),但我建议你深入分析你需要什么类型的绑定,因为有很多变种,我认为{{1或TCP绑定不符合您的需求。

我建议您选择命名管道,因为您的Web应用程序和窗口服务都是HTTP个应用程序。因此,您已经对此有疑问,例如,您可以看到这一个:WCF named pipe minimal example