我正在构建一个WebApi
应用程序,该应用程序将托管在Azure网站中,并在适当情况下使用async
调用。但是,要求我使日志记录发生在与调用方法不同的线程中,以便继续处理实际业务逻辑,同时某些“工作任务”处理日志记录。在MVC/WebApi应用程序中将异步与手动启动任务混合是否合适?
一个示例场景是这样的:
请求进入async
行动 - >电话await businessComponent.ProcessAsync(args)
- 同步_logger.Log(message, args)
>电话 - >创建new Task(() => FormatAndWrite(message, args)
,设置task.ConfigureAwait(false)
,来电task.Start()
所以我希望有人经验更丰富与async/await
和方式ASP.NET
处理async/await
告诉我他们是否看到上述解决方案的主要问题?这是否可以在处理实际业务逻辑请求时节省时间?
这只是一个可接受的方法,如果可以偶尔错过日志。 – 2015-02-24 16:16:57
这是因为在传入请求完成并返回之前,FormatAndWrite的执行可能不会执行? – IWriteApps 2015-02-24 16:32:00
间接,是的。 ASP.NET将偶尔回收您的应用程序,但如果有请求正在处理,它将不会回收。 – 2015-02-24 16:48:10