请看下面两种方法。第一个函数 GetQuoteImageContent 调用 GetFileHeadersByDirectory 来返回FileVM对象列表。但是,如果我返回第一个函数:
return await fileTasks.GetFileHeadersByDirectory(imageLibraryDirectory, false,
"/quotecontents/").ConfigureAwait(false);
然后它运行正常,但因为我需要对返回值进行一些处理,所以当我尝试将它分配给变量时:
IEnumerable<FileVM> images = await fileTasks.GetFileHeadersByDirectory(
imageLibraryDirectory, false,
"/quotecontents/").ConfigureAwait(false);
它没有返回任何东西而退出了该功能。 请问有人能指出我的通话机制中的错误吗?最后,我想要掌握集合 IEnumerable&lt; FileVM&gt; 对它进行一些处理。在这方面的任何帮助非常感谢。
public async Task<IEnumerable<FileVM>> GetQuoteImageContent(string quoteId)
{
IFileTasks fileTasks = new FileTasks();
string imageLibraryDirectory = string.Format("quotecontents/{0}", quoteId.Split('/')[1]);
IEnumerable<FileVM> images = await fileTasks.GetFileHeadersByDirectory(imageLibraryDirectory, false, "/quotecontents/").ConfigureAwait(false);
return images;
}
// This is 2nd async method which queries database to return list of files
public async Task<IEnumerable<FileVM>> GetFileHeadersByDirectory(string directory, bool recursive, string rootDirectory = "")
{
using (var fileSession = TasksManager.CreateTemporaryFSSession())
{
var fileQuery = fileSession.Query().OnDirectory(directory, recursive);
var fileHeaders = await fileQuery.ToListAsync().ConfigureAwait(false);
var fileVMs = ConvertToFileVM(fileHeaders, rootDirectory);
return fileVMs;
}
}
答案 0 :(得分:2)
根据评论,我了解到您并未等待GetQuoteImageContent
,这就是为什么您似乎认为您的方法不会返回图片。
如果您希望在获得图片后立即迭代图片,那么您也必须await
:
IEnumerable<FileVM> images = await GetQuoteImageContent(quoteId).ConfigureAwait(false);
foreach (var image in images)
{
// Do something
}
如果你没有await
,编译器会因为试图迭代不可迭代的东西而大喊你(因为Task
没有实现IEnumerable
)