我必须编写一个Web API来将数据插入到自定义的内部部署数据库中,然后调用LogicApps的存储过程来使用。当传递大量数据时,LogicApps会调用超时。所以我试图使用我在这里找到的解决方案: LogicAppsAsyncResponseSample
所以我基本上将所有代码放入doWork中:
foreach (var record in records)
{
...
//Insert record
cmd.ExecuteNonQuery();
}
...
//Call SP
cmd.ExecuteNonQuery();
runningTasks[id] = true;
我的问题是我应该在doWork中创建我的代码,异步吗?根据需要使用Await和ExecuteNonQueryAsync而不是ExecuteNonQuery并将AsynchronousProcessing添加到我的连接字符串中?
或者,我实际上也在考虑将其写成“Fire and Forget”。这意味着我将在我的API中启动一个线程来调用doWork,并在示例中立即返回OK而不是Accepted。然后我不需要存储线程状态或具有chekcStatus方法。这对我来说没问题,因为API可以在任何失败时发送警报。所提到的样本的唯一优势是我最终可以向LogicApps返回一些内容,表明成功与否,并在我的LogicApps日志中显示它(一个地方可以看到所有内容)。 “火与忘记”是一种合理的做法吗?
仅供参考:样本中对dowork的调用是:
new Thread(() => doWork(id)).Start();