使用 ConfigureAwait

Using ConfigureAwait

请看下面两种方法。第一个函数 GetQuoteImageContent 调用 GetFileHeadersByDirectory 以 return FileVM 对象列表。但是,如果我 return 第一个函数是 :

return await fileTasks.GetFileHeadersByDirectory(imageLibraryDirectory, false,
                                                 "/quotecontents/").ConfigureAwait(false);

然后它运行正常但是因为我需要对 returned 值做一些处理所以当我试图将它分配给一个变量时:

IEnumerable<FileVM> images = await fileTasks.GetFileHeadersByDirectory(
                                             imageLibraryDirectory, false,
                                             "/quotecontents/").ConfigureAwait(false);

它在没有 return 任何东西的情况下脱离了功能。 请有人指出我的调用机制中的错误吗?最后,我想获取集合 IEnumerable< FileVM > 对其进行一些处理。非常感谢这方面的任何帮助。

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;
    }
}

根据评论,我了解到您没有在等待 GetQuoteImageContent,这就是为什么您似乎认为您的方法没有返回图像。

如果您想在获取后立即迭代图像,您也必须 await

IEnumerable<FileVM> images = await GetQuoteImageContent(quoteId).ConfigureAwait(false);

foreach (var image in images)
{
    // Do something
}

如果你不这样做 await,编译器会因为你试图迭代不可迭代的东西而对你大喊大叫(因为 Task 没有实现 IEnumerable)。