我想在IIS中开始使用异步处理。编辑:我正在谈论使用任务并行库。在IIS中使用线程的特殊注意事项
例如,在某些页面加载时,我想记录一堆废话,发送电子邮件,更新某些表格等,但我不想让用户等待我记录所有这些废话。
所以通常我所做的是我有一个静态队列,我将日志信息推入,然后我有一个cron作业,每10分钟调用一次其OnLoad刷新队列的特殊页面。这很有用,但它的设置很笨重,特别是当你想记录50件事情时。我宁愿这样做:
Task.CreateNew(() => Log(theStuff));
不过,我很害怕在IIS中运行的任务,因为一个滑起来,你的整个网站的下降。
所以现在我有
SafeTask.FireAndForget(() => Log(theStuff));
此包装的委托在一些try/catch语句,并将其传递到Task.CreateNew。所以如果有人改变了一些影响其他事情的东西,而这些东西会在别的地方产生一个意外地被抛出的任何异常,我们会收到一个通知,而不是崩溃的网站。此外,catch内部的错误通知也在它自己的try/catch中,而catch的catch也会尝试以不同的方式尝试登录。
现在我可以安全地在IIS中异步运行东西,什么其他我需要担心的事情之前,我可以开始使用我的SafeTask类?
在IIS中使用线程时要小心。 IIS已经使用线程来处理各个请求,并且可用的总数有一个限制。 –
@joel我可以为此创建新线程,所以我不惹IIS限制? – dan
这是一个操作系统的限制,而不是IIS限制 –