我正在构建一个将所有内容存储在 Azure 表中的日志库。写入该表显然需要很多时间(从不超过 1 秒,但仍然太多让用户等待),所以 Log 方法返回一个 LogResult 实例,这里是类
public class LogResult
{
public string Id { get; set; }
public Task LoggingTask { get; set; }
public LogResult(string id, Task task)
{
Id = id;
LoggingTask = task;
}
}
这是 Log 方法如何完成的
return new LogResult(id, Task.Factory.StartNew(() =>
DoLogInAzure(account, id, exception, request))
);
为调用者提供等待它完成的选项(例如,如果它是控制台应用程序)。我面临的问题是 IIS在返回用户响应之前不应该等待它......如果我不等待它,IIS 并不总是执行任务。这个想法是向用户显示一条消息“......如果您与我们联系,请务必提及您的问题编号,XXX”,并且不要让他等到写入日志条目。
有没有办法强制 IIS 等到任务完成,即使它返回了响应?我想我可能需要编写一个异步接收请求的 Windows 服务,但看起来只是添加一个日志条目需要做很多工作......特别是如果我可以强制 IIS 等待它。
感谢您的任何想法!