У меня есть такой способ:
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()
застрять на первом ожидании, пока это не будет вызвано? Поскольку нет нитей, я думаю, что это так...