使用 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
)。
请看下面两种方法。第一个函数 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
)。