私はこのような方法を持っています:
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()
それが呼び出されるまで、まだ最初の待機に固執しますか? スレッド化が関係していないので、その通りだと思います...