2016-11-30 14 views
2

非同期メソッドConfigureConnectionStringから非同期メソッドInsertOperationを呼び出しています。私はclient.OnMessageコールを正しく使用していますか?キュー内のメッセージを非同期的に処理し、それをキューストレージに保存したいと考えています。非同期メソッド内のQueueClient.OnMessageの使用は意味がありますか?

private static async void ConfigureConnectionString() 
    { 
     var connectionString = 
      "myconnstring"; 
     var queueName = "myqueue"; 

     CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString")); 
     CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); 

     CloudTable table = tableClient.GetTableReference("test"); 
     table.CreateIfNotExists(); 
     Stopwatch sw = Stopwatch.StartNew(); 
     await Task.Run(() => InsertOperation(connectionString, queueName, table)); 
     sw.Stop(); 
     Console.WriteLine("ElapsedTime " + sw.Elapsed.TotalMinutes + " minutes."); 

    } 


private static async Task InsertOperation(string connectionString, string queueName, CloudTable table) 
    { 

     var client = QueueClient.CreateFromConnectionString(connectionString, queueName); 
     client.OnMessage(message => 
     { 

      var bodyJson = new StreamReader(message.GetBody<Stream>(), Encoding.UTF8).ReadToEnd(); 
      var myMessage = JsonConvert.DeserializeObject<VerifyVariable>(bodyJson); 

      Console.WriteLine(); 

      var VerifyVariableEntityObject = new VerifyVariableEntity() 
      { 
       ConsumerId = myMessage.ConsumerId, 
       Score = myMessage.Score, 
       PartitionKey = myMessage.ConsumerId, 
       RowKey = myMessage.Score 
      }; 
     }); 
    } 
+0

コードはちょっと混乱します。たとえば、InsertOperationに渡すテーブル変数は使用しません。達成したい論理を説明できますか? – PartlyCloudy

答えて

1

OnMessageAsync methodは非同期プログラミングモデルを提供するので、メッセージを非同期に処理することができます。

client.OnMessageAsync(message => 
{ 
    return Task.Factory.StartNew(() => ProcessMessage(message)); 
    //you could perofrm table and queue storage in ProcessMessage method 
}, options); 
0

実際のロジックを理解していないと、OnMessageを正しく使用していないように見えます。

OnMessageは、実行時間の長いクライアントのキュークライアントの動作を設定する方法です。たとえば、アプリケーションにシングルトンインスタンスがあるとしたら、意味があります。その場合、キューに置かれているメッセージをどのように処理するかをクライアントに指定しています。

あなたの例では、クライアントを作成し、OnMessageをセットアップし、クライアントを永続化しないため、効果的に何も達成されません。

関連する問題