我需要一些帮助,在Web API服务电话,我需要调用一个函数在执行异步,然后给出了一个回调函数的响应的DLL。 现在通常这将是一件好事,但现在的web API的想法是要执行的命令,然后返回响应。
下面是我这工作当前的代码,但我认为它可怕的代码,它的一切你不想做的事。 特别是当这个代码是要为每个请求运行一个Web服务器上。
[HttpGet]
public HttpResponseMessage Off(string id)
{
APNLink.Link link = LinkProvider.getDeviceLink(id, User.Identity.Name);
if (link.LinkConnectionStatus == APNLink.ConnectionStatus.Connected)
{
link.RelayCommand(APNLink.RelayNumber.Relay1, APNLink.RelayCommand.OFF, test);
BlockForResponse();
var msg = Request.CreateResponse(HttpStatusCode.OK);
return msg;
}
else
{
if (link.Connect())
{
var status = link.LinkConnectionStatus;
int timeout = 0;
while (status != APNLink.ConnectionStatus.Connected)
{
Thread.Sleep(500);
status = link.LinkConnectionStatus;
if (status == APNLink.ConnectionStatus.Connected)
{
break;
}
if (timeout++ > 16)
{
var msg1 = Request.CreateResponse(HttpStatusCode.RequestTimeout);
return msg1;
}
}
link.RelayCommand(APNLink.RelayNumber.Relay1, APNLink.RelayCommand.OFF, test);
BlockForResponse();
var msg = Request.CreateResponse(HttpStatusCode.OK);
return msg;
}
else
{
var msg2 = Request.CreateResponse(HttpStatusCode.BadRequest);
return msg2;
}
}
}
bool flag = false;
public void test(bool var)
{
flag = true;
}
private static bool BlockForResponse()
{
int count = 0;
while (!flag)
{
Thread.Sleep(500);
if (count > 10)
{
//timeout
return false;
}
}
return true;
}
现在的是我必须阻止等待DLL时,连接到被连接,只有我可以执行的命令。 一旦我执行的命令。 然后,我不得不再次为响应块。
另一个方面是,我可以在一个asp.net线程实际阻止? 当然每个请求都不会在自己的线程处理?
有没有什么办法可以使此代码整洁,最重要的更有效率?