首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ConfigureAwait

使用ConfigureAwait
EN

Stack Overflow用户
提问于 2015-02-23 14:41:12
回答 1查看 525关注 0票数 0

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

代码语言:javascript
复制
return await fileTasks.GetFileHeadersByDirectory(imageLibraryDirectory, false,
                                                 "/quotecontents/").ConfigureAwait(false);

然后它运行良好,但是由于我需要对返回的值进行一些处理,所以当我试图将它赋值给一个变量时:

代码语言:javascript
复制
IEnumerable<FileVM> images = await fileTasks.GetFileHeadersByDirectory(
                                             imageLibraryDirectory, false,
                                             "/quotecontents/").ConfigureAwait(false);

它在没有返回任何东西的情况下就脱离了这个功能。有人能指出我呼叫机制的错误吗?最后,我想获得集合IEnumerable< FileVM >,以便对其进行一些处理。在这方面的任何帮助都是非常感谢的。

代码语言:javascript
复制
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;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-23 15:31:08

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

如果您想在获取之后立即迭代图像,那么您也必须对此进行await处理:

代码语言:javascript
复制
IEnumerable<FileVM> images = await GetQuoteImageContent(quoteId).ConfigureAwait(false);

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

如果不使用await,编译器会对您大喊大叫,因为它试图迭代不可迭代的东西(因为Task没有实现IEnumerable)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28676271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档