【发布时间】:2016-04-27 08:26:12
【问题描述】:
我有以下中间件代码:
public class UoWMiddleware : OwinMiddleware
{
readonly IUoW uow;
public UoWMiddleware(OwinMiddleware next, IUoW uow) : base(next)
{
this.uow = uow;
}
public override async Task Invoke(IOwinContext context)
{
try
{
await Next.Invoke(context);
}
catch
{
uow.RollBack();
throw;
}
finally
{
if (uow.Status == Base.SharedDomain.UoWStatus.Running)
{
var response = context.Response;
if (response.StatusCode < 400)
{
Thread.Sleep(1000);
uow.Commit();
}
else
uow.RollBack();
}
}
}
}
有时我们会观察到响应在通过 fiddler 调用 uow.Commit() 之前返回给客户端。例如,我们在 uow.Commit 中设置了一个断点,我们看到响应返回给客户端,尽管我们正在等待断点。这有些出乎意料。我认为响应将在 Invoke 方法结束后严格返回。我错过了什么吗?
【问题讨论】:
标签: asp.net-web-api owin middleware