【发布时间】:2016-05-15 13:24:40
【问题描述】:
我正在尝试通过 WebAPI 调用从 RavenDb 加载文档。当我打开异步 IDocumentSession 并调用 LoadAsync 时,我没有收到异常或结果,并且线程立即退出,没有错误代码。
我能够绕过我的 API 的所有结构并重现错误。
下面是不起作用的代码:
public IHttpActionResult GetMyObject(long id)
{
try
{
var session = RavenDbStoreHolderSingleton.Store.OpenAsyncSession();
var myObject= session.LoadAsync<MyObject>("MyObject/1").Result;
return Ok(myObject);
}
catch (Exception e)
{
return InternalServerError(e);
}
}
我只是将对象的 Id 硬编码为 1 以进行测试,但为不存在的对象(例如“MyObject/1”)调用函数具有相同的结果。
但是,此代码有效:
public async Task<IHttpActionResult> GetMyObject(long id)
{
try
{
var session = RavenDbStoreHolderSingleton.Store.OpenAsyncSession();
var myObject= await session.LoadAsync<MyObject>("MyObject/1");
return Ok(myObject);
}
catch (Exception e)
{
return InternalServerError(e);
}
}
我尝试过/摆弄过的事情:
- 更改调试中捕获的异常
- 仔细监控 Raven Studio,看看我是否能发现任何问题(我没有,但我不确定我找对了地方)
- 在没有附加调试器的情况下运行 API,以查看是否发生错误或 Raven Studio 中是否显示某些内容(无更改)
所以我想我偶然发现了一个“修复”,但是有人可以解释为什么其中一个会以如此奇怪的方式失败,而另一个却可以正常工作吗?
在实际应用程序中,API 调用没有 async/await 对,但是正在进行调用的代码实际上使用了 async/await。
这是导致我调查此问题的失败的存储库类:
public async Task<MyObject> Load(string id)
{
return await _session.LoadAsync<MyObject>(id);
}
【问题讨论】:
标签: c# asynchronous async-await task ravendb