我工作在一个有点大的Web应用程序,而后端主要是在PHP中。 代码中有几个地方需要完成一些任务,但我不想让用户等待结果。 例如,在创建新帐户时,我需要向他们发送一封欢迎邮件。 但是,当他们点击“完成注册”按钮时,我不想让他们等到电子邮件实际发送,我只是想启动过程,并立即返回一个消息给用户。 直到现在,在一些地方,我一直在用exec()来进行攻击。 基本上做这样的事情: exec("doTask.php $arg1 $arg2 $arg3 >/dev/null 2>&1 &"); 这似乎工作,但我想知道如果有更好的办法。 我正在考虑编写一个在MySQL表中排队任务的系统,以及一个单独的长时间运行的PHP脚本,每秒查询一次这个表,并执行它找到的任何新任务。 如果需要的话,这也可以让我在未来的几个工人机器之间分配任务。 我正在重新发明轮子吗? 有没有比exec()黑客或MySQL队列更好的解决方案?
编辑: 这个问题看起来可能是相同的问题,但没有回应… 编辑:在测试案例5中,任务似乎卡在WaitingForActivation状态。 我遇到一些奇怪的行为在.NET 4.5中使用System.Net.Http.HttpClient – “等待”(例如) httpClient.GetAsync(…)调用的结果将永远不会返回。 只有在使用新的异步/等待语言功能和任务API时,才会出现这种情况 – 只使用延续时,代码似乎总能工作。 下面是一些重现问题的代码 – 在Visual Studio 11中将其放入一个新的“MVC 4 WebApi项目”中,以显示以下GET端点: /api/test1 /api/test2 /api/test3 /api/test4 /api/test5 <— never completes /api/test6 这里的每个端点都返回与从未完成的/api/test5相同的数据(来自stackoverflow.com的响应头)。 我在HttpClient类中遇到了一个错误,或者我以某种方式滥用API? 代码重现: public class BaseApiController : ApiController { /// <summary> /// Retrieves data using continuations /// </summary> protected Task<string> Continuations_GetSomeDataAsync() { var httpClient = new HttpClient(); var […]
我正在寻找一个好的想法来实现一个通用的方式来执行代码的单行(或匿名委托)超时。 TemperamentalClass tc = new TemperamentalClass(); tc.DoSomething(); // normally runs in 30 sec. Want to error at 1 min 我正在寻找一个解决方案,可以优雅地在我的代码与气质代码交互(我不能改变)的许多地方实现。 另外,如果可能的话,我想让有问题的“超时”代码停止执行。
我正在创建(学习)Google Chrome的扩展程序。 为了调试一些代码,我插入了console.log() ,如下所示: var fourmTabs = new Array(); chrome.tabs.query({}, function (tabs) { for (var i = 0; i < tabs.length; i++) { fourmTabs[i] = tabs[i]; } }); for (var i = 0; i < fourmTabs.length; i++) { if (fourmTabs[i] != null) window.console.log(fourmTabs[i].url); else { window.console.log("??" + i); } } 这是非常简单的代码:获取所有标签信息到我自己的数组中,并打印一些东西。 为了检查代码是否正常工作,我运行代码。 问题来了: 当我使用断点(通过开发工具),代码运行良好。 没有断点,什么都不打印。 […]
我试图编写一个C程序(在Linux上),循环直到用户按下一个键,但不应该需要按键来继续每个循环。 有一个简单的方法来做到这一点? 我想我可以用select()来做,但是这似乎很多工作。 或者,有没有办法赶上一个ctrl – c按键清理之前,程序关闭,而不是非阻塞io?