WebAPI呼び出しによってRavenDbからドキュメントをロードしようとしています。非同期IDocumentSessionを開いてLoadAsyncを呼び出すと、例外も結果もなくなり、スレッドはエラーコードなしで即座に終了します。RavenDb 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);
}
}
私は単にハードテストのために1にオブジェクトのIDをコード化されたが、(例えば/ 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);
}
}
物事を/いじっ:
- 慎重かどうかを確認するためにレイヴンメーカーを監視
- のデバッグにキャッチされた例外を変更します私は何か問題を見つけることができました(私はしませんでしたが、私は正しい場所を探していたとは確信していません)
- Runniエラーが発生したか何かがレイヴンStudioで現れた場合には(変更)
は、だから私は、私は「修正」につまずいていると思いませんが、誰かが、なぜ1 説明できるかどうかを確認するためにデバッガをアタッチすることなく、APIをngのそのような奇妙な方法で失敗するでしょうが、他の人は完全にうまくいくでしょうか?実際のアプリケーションで
、APIの呼び出しは非同期/のawaitのペアを持っていなかった、しかしがコールが実際に/待つ非同期を使用していた作っていたことをコード。ここで
は私がこの問題を調査するために引き起こされた失敗したリポジトリクラスです:
public async Task<MyObject> Load(string id)
{
return await _session.LoadAsync<MyObject>(id);
}
デッドロックによって終了するスレッドは、コード0で終了しますか?何らかの問題を示唆する価値はありませんか?これはもうちょっと意味をなさないようになってきています。私はこの話題についてもっと掘り下げなければならないようです。 – Max
デッドロックがないということは、スレッドが終了しないことを意味します。デッドロックが外部で解決されるまで、プロセスを停止し、保持スレッドの1つを強制終了するまで、スレッドは永続的にブロック状態になります。また、デッドロックは例外やエラーを意味するものではないため、エラーコードはありません –