Asynchronous LogicApps Web API使其异步

Asynchronous LogicApps Web API使其异步,asynchronous,asp.net-web-api,azure-logic-apps,Asynchronous,Asp.net Web Api,Azure Logic Apps,我必须编写一个Web API将数据插入定制的本地数据库,然后调用一个存储过程供LogicApps使用。LogicApps在传递大量数据时的调用超时。所以我尝试使用我在这里找到的解决方案: 因此,我基本上会将我所有的代码都放在doWork中,如下所示: foreach (var record in records) { ... //Insert record cmd.ExecuteNonQuery(); } ... //Call SP cmd.ExecuteNonQuery();

我必须编写一个Web API将数据插入定制的本地数据库,然后调用一个存储过程供LogicApps使用。LogicApps在传递大量数据时的调用超时。所以我尝试使用我在这里找到的解决方案:

因此,我基本上会将我所有的代码都放在doWork中,如下所示:

foreach (var record in records)
{
  ...
  //Insert record
  cmd.ExecuteNonQuery();
}
...
//Call SP
cmd.ExecuteNonQuery();

runningTasks[id] = true;
我的问题是,我应该使我的代码在doWork中异步吗?是否根据需要使用Wait和ExecuteOnQueryAsync而不是ExecuteOnQuery,并将异步处理添加到我的连接字符串

或者,我也在考虑写这篇文章,写的是“火与遗忘”。这意味着我将在API中启动一个线程来调用示例中的doWork,并立即返回OK而不是Accepted。这样我就不需要存储线程状态或使用chekcStatus方法。这对我来说没问题,因为API可以在出现任何故障时发送警报。注意到的示例的唯一优点是,我最终可以将指示成功与否的内容返回给LogicApps,并将其显示在我的LogicApps日志中(一个地方可以查看所有内容)。“开火然后忘记”是一个好的做法吗

仅供参考:示例中对dowork的调用是:

new Thread(() => doWork(id)).Start();

几个问题-您试图返回的数据有多大?我猜您看到对SQL的请求花费了>90秒,然后超时了?是的。当插入40行并进行查找等操作时,该任务大约需要2分钟。在foreach中还有很多工作要做,SP也可能需要10-30秒。新的线程调用通过代码分析返回错误。错误CS1998此异步方法缺少“wait”运算符,将同步运行。考虑使用“Acess”操作符等待非阻塞API调用,或“等待任务.Run(…)”在后台线程上执行CPU绑定的工作。因此,将其更改为这样会更好:等待Task.Run(()=>DoWork());对不起,我忘了再谈这个。如果您不需要从API返回响应,我将使用async。假设您正确处理线程,这应该是一个良好的实践。将降低集成的复杂性,并与我们的一些内置连接器一起使用。但如果doWork由传统线程处理。开始,doWork甚至需要异步吗?同样在“火和忘记”的情况下,我认为我不需要处理线程。一旦完成了doWork,API就完成了,就不会有对LogicApps的响应。在启动线程之后,我不需要在主例程中执行任何操作,只需要立即返回OK。