2016-10-30 5 views
1

私はAzure/SQLトピックの初心者です。クラスオブジェクトに属するSQL Azureデータベースからオブジェクトを取得しようとしています。 SQL Serverデータベースに自分のタイプUserPositionに対応するオブジェクトがあるとします。Azure:SQLデータを同期的に取得

どうすれば簡単に同期させることができますか?現時点では、パフォーマンスは重要ではありません。私はちょうど学習目的のためにデータを取得したい。

これは私のコードです:

IMobileServiceTable<UserPosition> PositionTable; 
    MobileServiceClient client; 
    client = new MobileServiceClient(Constants.ApplicationURL); 
    PositionTable = client.GetTable<UserPosition>(); 
    Task<List<UserPosition>> items; 
    items = PositionTable.ToListAsync(); 
    items.Start(); 

私は今、例外を取得:

スタート約束スタイルのタスクのために呼ばれないことがあります。

(私はドイツからそれを翻訳)

適切にこれを行うにはどのように?

答えて

0

asyncキーワードは、複雑なスレッド実行コードを、同期しているようなプログラムやプログラムに変換するのに最適です。これを行うには、awaitキーワードを使用します。これは、メソッドが同期的であるかのように実行されますが、実行スレッドがプールに戻され、ホストプロセスがそのプロセスを待っている間に再利用されるという利点があります実行する依存関係。あなたは、タスク自体を監視/制御の詳細に興味がない場合は(と私はあなたがこの例であるとは思わない)、その後、

List<UserPosition> data = await PositionTable.ToListAsync(); 

Task<List<UserPosition>> items; 
items = PositionTable.ToListAsync(); 
items.Start(); 

を交換してくださいあなたのメソッドを非同期としてマークします。これにより、非同期プログラミングの手間をかけずに、非同期実行の利点が得られます。

0

async methodsは常に実行中のTask<T>を返しますので、Task<List<UserPosition>> itemsはすでに実行されています。 items.Start();を削除すると、コードが機能します。

+0

今は例外がありません。しかし、私はいずれのデータも得ていない。このタスクで「WaitingForActivation」が表示されます。最後に "List allItems = items.Result"を実行すると、アプリケーションがそこにハングします。 – Christoph

+0

タスクのResultプロパティを待つか検査すると、デッドロックが発生する可能性があります。 – Tinwor

+0

ありがとうございます。どうすればデータを取り出すことができますか?また、アイテムのタスクにデータがあるかどうかを確認することもできます。 – Christoph

関連する問題