kazuk は null に触れてしまった

C# / .NET 系技術ネタ縛りでお送りしております

Continuation on Azure Table


メモ、実行確認などはまだしていない、(リファレンスを見ながら「こんな感じ?」って書いてるだけ)
 
コールバック必須だと
 
ResultSegment<T> queryResult;
public IEnumerable<T> ExecuteTableQuery( CloudTableQuery<T> q )
{
     var ar = q.BeginExecuteSegmented( ExecuteTableQueryCallback, q );
     if( !ar.CompleteSynchronously ) ar.AsyncWaitHandle.WaitOne();
     foreach( T item in queryResult.Results ) yield return item;
     while( queryResult.ContinuationToken !=null )
    {
        ar = q.BeginExecuteSegmented( queryResult.ContinuationToken, ExecuteTableQueryCallback, q );
        if( !ar.CompleteSynchronously ) ar.AsyncWaitHandle.WaitOne();
         foreach( T item in queryResult.Results ) yield return item;        
    }
}
 
private void ExecuteTableQueryCallback( IAsyncResult ar )
{
    var q = ar.AsyncState as CloudTableQuery<T>;
    queryResult = q.EndExecuteSegmented( ar );
}
 
コールバックなし可能な非同期パターンなら以下
 
public IEnumerable<T> ExecuteTableQuery( CloudTableQuery<T> q )
{

    ResultSegment<T> queryResult;

     var ar = q.BeginExecuteSegmented( null, q );
     queryResult = q.EndExecuteSegmented( ar );

     foreach( T item in queryResult.Results ) yield return item;
     while( queryResult.ContinuationToken !=null )
    {
        ar = q.BeginExecuteSegmented( queryResult.ContinuationToken, ExecuteTableQueryCallback, q );
        queryResult = q.EndExecuteSegmented( ar );
         foreach( T item in queryResult.Results ) yield return item;        
    }
}
 
動けばこれを元にHTTPリクエストトレースしてRESTでやり取りの詳細がわかるかもしんない。
 
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。