【问题标题】:Can a thread in ASP.NET work keep continue after Response.End?ASP.NET 中的线程可以在 Response.End 之后继续工作吗?
【发布时间】:2016-04-01 20:30:25
【问题描述】:

我想与设备建立 tcp 连接并不断从设备中检索数据。我想从一个简单的请求开始,即使页面响应完成,也让它保持工作背景。这在 asp.net 中可行吗?

【问题讨论】:

  • 您需要创建一个新线程并在该线程上进行设备通信。您不能使用请求处理线程,因为主机(IIS 等)将在完成后将其返回到请求线程池。

标签: asp.net multithreading iis httpapplication


【解决方案1】:

ASP.NET 中的线程能否在 Response.End 之后继续工作?

是的,如果您不关心或不需要结果,您可以。

比如下面的代码,你调用了AddLogAsync,插入了一条日志,但是你并不关心插入是否成功。

public Task AddLogAsync(Log log)
{
   return Task.Run(() => AddLog(log));
}

private void AddLog(TraceLog traceLog)
{
   // Do something here.
}

我想建立一个到设备的 tcp 连接并持续保持 从设备检索数据。我想从一个简单的请求开始 并保持工作。这在 asp.net 中可行吗?

我不是很理解上面的问题。在 Response.End 之后,您无法返回任何内容,尽管您可以继续在不同线程中处理某些内容。

【讨论】:

  • Win,是否有可能使用于连接设备并从中检索数据的对象保持活动状态,即使页面响应已结束?当设备触发事件(考勤控制设备)时,您如何确定该对象是否存在并完成其工作?
  • 我的回答是你不能确定进程是否还活着。如果你想确定,你需要安排一个任务,比如hangfire。基本上,在 Response.End 之后,设备和服务器之间的连接被断开。换句话说,服务器无法再与设备对话。如果您希望服务器与设备对话,您需要使用称为SignalR 的不同技术。 Hangfire 和 SignalR 不在原始问题的范围内。
猜你喜欢
  • 2012-07-17
  • 2018-02-01
  • 1970-01-01
  • 2012-08-30
  • 2020-11-29
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
相关资源
最近更新 更多