2016-09-09 13 views
0

ここでは、C#でazure documentdbストアドプロシージャを実行しようとしています。Azure DocumentDB非同期リクエストの発行

static string EndpointUri = "https://asdf.documents.azure.com:443/"; 
    static string PrimaryKey = "X"; 
    static DocumentClient client = new DocumentClient(new Uri(EndpointUri), PrimaryKey); 

    static void Main(string[] args) 
    { 
     var x = doit(); 
     Read(); 
    } 
    public static async Task<string> doit() 
    { 

     StoredProcedureResponse<string> sprocResponse = await client.ExecuteStoredProcedureAsync<string>("/dbs/eew/colls/fff/sprocs/ggg/", "[email protected]"); 
     return ""; 
    } 

メソッドコールExecuteStoredProcedureAsyncを同期して実行することを希望しました。ここで私がそれをした方法があります。

私はこれが同期メソッド呼び出しとして機能するはずであることを理解していますが、これはリクエストを待っているためです。しかし、それはそのようには機能しません。

私は、非同期についての理解が不足しているため、これはC#の使用を待っていると確信しています。

Googleでこれを解決する方法が見つかりませんでした。

どうすれば同期できますか。

+0

あなたはおそらくAzureで現在の鍵を変更したいと思っています。あなたはちょうどデータベースを作成し、あなたのアカウントにお金を費やすためにインターネットアクセスを与えました:) – Frans

+0

@Frans Thanks !.しかし、投稿する前にいくつかの文字を変更しました。私はその馬鹿ではない:)。 –

+0

こんにちは、ちょうど一般的なアドバイス;投稿する前にxxxに変更するのが最善です。最高であなたは私のような人に心配してもらえます。最悪の場合、パスワードを強制的にシードとして使用する人がいます...そのアカウントには生産データがあり、私はあなたのcsioでした:) – Frans

答えて

0

変更

var x = doit(); 

var x = doit().Result; 

に注意すること。この単純なコンソールアプリケーションでうまく動作しますが、実際のアプリケーションでデッドロックが発生する可能性があります。実際のアプリケーションで同期させる必要がある場合は、このようなことを行う必要があります。

var x = Task.Run(() => doit()).Result; 

これを説明すると、私は簡単に答えが出ることができます。申し訳ありません。 Pluralsightへのアクセスがあれば、これはJon Skeetの優れた説明:https://www.pluralsight.com/courses/skeet-asyncです。 それ以外の場合は、C#in Nutshell(本)またはオンラインチュートリアルを参照してください。

+0

.NETの非同期パターンについて話しているStephen Clearyの良い記事もあります。ここに一つの例があります:http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html –

+0

@リウはい、良い叫び、彼らはとても良いです。 – Frans

関連する問題