私はAzureテーブルストレージからデータを取得し、それをテキストファイルに転送するコンソールアプリケーションを持っています。今、このコードは、テキストファイルに書き込む前に最初の1000件のレコードを取得することを意味し、シングルスレッドで実行 ExecureSegmentedQueryとStreamWriterのAzureテーブルストレージ分離スレッド
using (StreamWriter writer = new StreamWriter(filePath))
{
//header
writer.Write("PartitionKey|RowKey|Timestamp|Id|");
writer.WriteLine();
do
{
var entities = new List<TModel>();
var queryResult = table.ExecuteQuerySegmented(new TableQuery<TModel>(), token);
entities.AddRange(queryResult.Results);
count = count + 1000;
Console.WriteLine("{0} records retrieved", count);
//records
foreach (TModel entity in entities)
{
writer.Write("\"" + entity.PartitionKey + "\"|\"" + entity.RowKey + "\"|" + entity.Timestamp + "|" + entity.Id);
writer.WriteLine();
}
token = queryResult.ContinuationToken;
}
while (token != null);
writer.Dispose();
は、次の1000のレコードは、その後追加取得します:現在、私のコードは次のようになりそれをファイルに保存します。
データ検索の処理とファイルへの書き込みを2つの別々のスレッドに分割する方法があるとすれば、スレッドがセグメント化されたクエリの実行を実行するだけで、ファイルへのデータ(キューのような)?
ご提案は大歓迎です。前もって感謝します!
このコードを実行すると何も起こりません。コンソールとテキストファイルにメッセージは表示されません。スレッドが実行されるように、メインセクションに何かを追加する必要があるかもしれません。 – Joseph
Task.Runメソッドはすぐに新しいスレッドを呼び出します。 Console.Read();を削除しましたか?はいの場合は、再度追加してください。また、コードにブレークポイントを追加し、コードを1行ずつ実行して、期待どおりに実行されているかどうかを確認することもできます。 – Amor
私はコンソールアプリケーションを無人サービスにしようと考えています。Console.Read()を追加すると無人サービスには意味がないと思うユーザー入力が必要になります。また、ブレークポイントを追加すると、Console.Read()を使わないでコードが入力されることはありません。 Console.Read()以外のオプションは何ですか? – Joseph