我有这样的方法:
public static async Task SaveAllAsync()
{
foreach (var kvp in configurationFileMap)
{
using (XmlWriter xmlWriter = XmlWriter.Create(kvp.Value, XML_WRITER_SETTINGS))
{
FieldInfo[] allPublicFields =
kvp.Key.GetFields(BindingFlags.Public | BindingFlags.Static);
await xmlWriter.WriteStartDocumentAsync();
foreach (FieldInfo fi in allPublicFields)
{
await xmlWriter.WriteStartElementAsync("some", "text", "here");
}
await xmlWriter.WriteEndDocumentAsync();
}
}
}
但是我努力跟踪有人打电话时会发生的情况SaveAllAsync()
。
我认为将会发生以下情况:
SaveAllAsync()
会将控制权返回给该行的呼叫者await xmlWriter.WriteStartDocumentAsync();
SaveAllAsync()
(或等待任务)时,会发生什么?将SaveAllAsync()
仍然是第一的await坚持到它被调用?因为不涉及线程,所以我想是这样的...您可以await
将async
方法视为“暂停”该方法,直到该操作完成为止。作为一种特殊情况,如果操作已经完成(或非常快),则await
不会“暂停”该方法。它会立即继续执行。
因此,在这种情况下(假设WriteStartDocumentAsync
尚未完成),await
将暂停方法并将未完成的任务返回给调用方。请注意,Task
由async
方法返回的代表该方法。方法完成后,Task
即完成。
最终,WriteStartDocumentAsync
它将完成,并且将安排该async
方法的其余部分以继续运行。在这种情况下,它将执行方法的下一部分,直到next await
,再次暂停时,依此类推。最终,该async
方法将完成,这将完成Task
表示该方法的返回值。
有关更多信息,我在我的博客上有一个async
/await
介绍。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句