我有一个控制台应用程序,它从Azure表存储中检索数据并将其传输到文本文件。目前,我的代码如下所示:Azure Table存储ExecuteSegmentedQuery和StreamWriter的单独线程
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条记录中运行,那么将获得下1000条记录然后追加它到一个文件。
我想知道是否有办法将数据检索和写入文件的处理拆分为两个单独的线程,这意味着一个线程将执行分段查询的执行,并且将执行写入数据到文件(像一个队列)?
欢迎任何建议。提前致谢!
运行此代码时没有任何反应。控制台和文本文件中没有消息没有出现。也许你需要在Main部分添加一些内容,以便线程能够运行。 – Joseph
Task.Run方法将立即调用一个新的线程。你是否删除了Console.Read();?如果是,请重新添加。另外,您可以在代码中添加一个断点并逐行运行您的代码,以检查它们是否按预期执行。 – Amor
我打算控制台应用程序是一个无人参与的服务,因此添加Console.Read()将意味着需要一个用户输入,我认为这对无人参与服务没有意义。另外,如果没有Console.Read(),添加断点将不会输入代码。 Console.Read()除了可以是其他选项吗? – Joseph