私は、Azureに格納されているサンプルdocumentDBを使用するために、MSDNのガイドに従って単純なアプリケーションを構築しました。私のコンソールアプリケーションからASP.NET C#Azure documentDbクラスライブラリが動作しない
私は(クラスライブラリプロジェクトで)このメソッドを実行することができ、すべてがokです:
private static async Task CreateDatabaseIfNotExistsAsync(string DatabaseId)
{
try
{
await client.ReadDatabaseAsync(UriFactory.CreateDatabaseUri(DatabaseId));
}
catch (DocumentClientException e)
{
if (e.StatusCode == System.Net.HttpStatusCode.NotFound)
{
await client.CreateDatabaseAsync(new Database { Id = DatabaseId });
}
else
{
throw;
}
}
}
しかし、私はASP.NETアプリケーションから同じクラスライブラリを使用すると、プログラムが停止します(例外、その他の例外はありません)。ReadDatabaseAsync
メソッド呼び出し。
私はすでに非同期呼び出しを変更しようとしました...運がない。
呼び出しコードとは何ですか?これはブロックし、 'CreateDatabaseIfNotExistsAsyncs.Wait()'のようなことをしますか? –
@Gabiはい、メソッドは によって呼び出されます。CreateDatabaseIfNotExistsAsync(Databasename).Wait(); – Jack
これは、ASP.NETでデッドロックを引き起こす可能性があります。 [here](http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html)を参照してください。 したがって、上記のコードで待ち状態の呼び出しで '.ConfigureAwait(false)'を使用するか、 'CreateDatabaseIfNotExistsAsync'呼び出しを' Task.Run'でラップしてください。 'Task.Run(()=> CreateDatabaseIfNotExistsAsync(Databasename))。Wait()' –