问题
当我尝试在async方法中调用我的“ normal”方法时,它将从Debugger 1中被忽略。
这是我的异步方法
internal async static Task<DefinitionsModel> DeserializeAsync(this string path)
{
var model = new DefinitionsModel();
var content = await File.ReadAllTextAsync(path);
model.Pages = content.GetPages();
return model;
}
Run Code Online (Sandbox Code Playgroud)
这是我的“正常”方法
private static IEnumerable<PageModel> GetPages(this string content)
{
var level = 0;
var value = nameof(PageModel.Page).GetDElement<PageModel>();
var start_with_line = $"{level} {value} ";
var end_with_line = string.Concat(Enumerable.Repeat(Environment.NewLine, 2));
var expression = $@"\b{start_with_line}\S * {end_with_line}\b";
var matches = content.GetPagesFromContent(expression);
yield return new PageModel();
}
Run Code Online (Sandbox Code Playgroud)
帮助图片
yield除非枚举,否则不会屈服。在这种情况下
model.Pages = content.GetPages();
Run Code Online (Sandbox Code Playgroud)
没有枚举。您可以这样做
model.Pages = content.GetPages().ToList();
Run Code Online (Sandbox Code Playgroud)
您可以通过使用消耗的iterator方法foreach语句或LINQ查询,勿庸置疑ToList()迭代的IEnumerable使用foreach
虽然在所有诚实,我很努力工作了,你在做什么,最有可能需要重新思考GetPages完全
yield在语句中使用上下文关键字时,表示出现的方法,运算符或get访问器是 iterator。yield当您为自定义集合类型实现IEnumerable和IEnumerator模式时,使用定义迭代器就不需要显式的额外类(该类包含枚举的状态,请参见IEnumerator的示例)。您使用yield return语句一次返回每个元素。
您可以通过使用foreach语句或LINQ查询来使用迭代器方法。foreach循环的每次迭代都调用iterator方法。在迭代器方法中到达yield return语句时,将返回expression,并保留代码中的当前位置。下次调用迭代器函数时,将从该位置重新开始执行。
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |