在列出Azure Data Lake存储中的目录时遇到麻烦。我几乎使用默认模板根据Azure Data Lake Storage Gen2列出文件系统上的目录。我已经将代码包装到单元测试中,但是遇到了JSON序列化问题。这是我从单元测试方法中调用的asnyc任务。
public async Task<List<string>> ListFilesInDirectory(string Directory)
{
IAsyncEnumerator<PathItem> enumerator =
_dataLakeFileSystemClient.GetPathsAsync(Directory).GetAsyncEnumerator();
await enumerator.MoveNextAsync();
List<string> somelist = new List<string>();
PathItem item = enumerator.Current;
while (item != null)
{
Console.WriteLine(item.Name);
somelist.Add(item.Name);
if (!await enumerator.MoveNextAsync())
{
break;
}
item = enumerator.Current;
}
return somelist;
}
这是我的错误信息。
System.AggregateException HResult = 0x80131500 Message =发生一个或多个错误。 (“ <”是值的无效开头。LineNumber:0 | BytePositionInLine:0。)Source = System.Private.CoreLib StackTrace: 在System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) System.Threading.Tasks.Task.Wait(Int32毫秒超时, CancellationToken cancelToken() System.Threading.Tasks.Task.Wait()在 HistoricMarketDataLibTests.HistoricIceDataManagerTests.DirectoryListing(String 目录)中 C:\ Users \ bbf22 \ source \ repos \ HistoricMarketDataClient \ BarDefinitionTests \ HistoricIceDataManagerTests.cs:line 143
此异常最初是在此调用堆栈上抛出的: System.Text.Json.ThrowHelper.ThrowJsonReaderException(参考System.Text.Json.Utf8JsonReader,System.Text.Json.ExceptionResource, 字节,System.ReadOnlySpan) System.Text.Json.Utf8JsonReader.ConsumeValue(字节) System.Text.Json.Utf8JsonReader.ReadFirstToken(字节) System.Text.Json.Utf8JsonReader.ReadSingleSegment() System.Text.Json.Utf8JsonReader.Read() System.Text.Json.JsonDocument.Parse(System.ReadOnlySpan,System.Text.Json.Utf8JsonReader,ref System.Text.Json.JsonDocument.MetadataDb,参考 System.Text.Json.JsonDocument.StackRowStack) System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory,System.Text.Json.JsonReaderOptions,byte []) System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory,System.Text.Json.JsonDocumentOptions) System.Text.Json.JsonDocument.Parse(字符串,System.Text.Json.JsonDocumentOptions) Azure.Storage.Files.DataLake.ErrorExtensions.CreateException(string, Azure.Core.Pipeline.ClientDiagnostics,Azure.Response) ... [通话堆栈被截断]
内部异常1:JsonReaderException:'<'是a的无效开头 值。行号:0 | BytePositionInLine:0。
我得到Item = null,所以它根本不会遍历Pathitems。我不知道这是否与某些服务请求限制有关,因为数据存储量很大,但是我希望得到某种合理的错误代码消息。我想知道JSON序列化问题的背后是什么。这与调用的异步任务有关吗?我还应该提到,可以在指定时查询文件夹或文件的存在,但是每当调用GetPathAsync
或GetPath
时,我都会遇到麻烦。但是涉及的文件和文件数量很大。我不知道这是否会引起某种服务请求问题,是否应该考虑在基于SQL的后端中映射文件位置。
我还应该说,使用R Azure RMR查询某些子文件夹的内容已经取得了一些成功。但是,查询其中任何一个的父母将花费很多时间。虽然使用上述方法无法成功查询.net中的任何子文件夹,但我仍然认为这可能与某些任务未及时返回结果有关?但是话又说回来,这只是我在没有根据的猜测。
我将不胜感激。远远不是Azure .NET API和异步任务的专家。